interface getNumber {
(like: number): number;
}
interface Post {
id: number;
title: string;
getNumber: getNumber;
// getNumber: (like: number) => number
}
interface Post {
[key: string]: unknown;
id: number;
title: string;
}
NUMBER
인 객체이므로 item은 number 타입이 된다.interface Names {
[item: number]: string;
}
names:Names = ['Kim', 'Lee']
function add(a:string, b:string): string;
function add(a:number, b:number): number;
function add(a:any, b:any): any {
return a+b;
}
// 함수 선언부
function sayWord(word: string): string
function sayWord(words: string[]): string
// 함수 구현부
function sayWord(word:any): any {
if (typeof word === "string") {
return word;
} else if (Array.isArray(word)) {
return word.join(" ");
}
throw new Error("word Error");
}
sayWord(['hello', 'world']);
class
에서 this로 접근 시, 클래스 내부에 해당 속성의 타입을 적어줘야 함.class Post {
constructor(id: number, name: string) {
this.id = id; // error
this.name = name; // error
}
}
class Post {
public id: number = 0;
public name: string = "";
constructor(id: number, name: string) {
this.id = id;
this.name = name;
}
}
public 과 같은 접근 제어자와 함께 사용.
class Post {
constructor(private id: number, protected name: string) {
}
}
function getArrLength (arr: number[]): number {
return arr.length;
}
const arr1 = [1,2,3];
const arr2 = ['a','b','c'];
const arr3 = [true, false, true];
function getArrLength (arr: number[] | string[] | boolean[]): number {
return arr.length;
}
<T>
를 적어주고<>
사이에 타입을 적어주면 된다.function getArrLength<T>(arr:T[]):number {
return arr.length;
}
getArrLength<number>([1,2,3]);
getArrLength<string>(['a','b','c']);
getArrLength<boolean>([true, false]);
const makeName = (obj: {firstName: string, lastname: string}) => {
return {
...obj,
fullName: obj.firstName + " " + obj.lastName
}
}
makeFullName({firstName: "Tom", lastName: "Doe", location: "Seoul"}); // Error (location 정의 X)
// obj.loaction을 추가로 넣어줄 수 있도록 할 때 Generic 사용 가능
const makeName = <T extends {firstName: string, lastname: string}>(obj: T) => {
return {
...obj,
fullName: obj.firstName + " " + obj.lastName
}
}
extends
키워드를 사용하여 해당 프로퍼티를 포함해 +a로 새로운 프로퍼티 전달 가능함.import React from 'react';
interface Props {
name: string;
}
const ReactComponent: React.FC<Props> = ({ name }) => {
return <div>{name}</div>;
}