기본 정의
interface Person {
name: string;
age: number;
}
const person1: Person = { name: 'js', age: 20 };
const person2: Person = { name: 'ljs', age: 'twenty' }; // Error
선택 속성
interface Person {
name: string;
age?: number;
}
const person1: Person = { name: 'js' };
Read only 속성
interface로 객체를 생성할때에만 값을 할당할 수 있고, 그 이후에는 변경할 수 없는 속성이다.
Q.마치 const같은 것??
⚠️ReadonlyArray<number>
interface Person {
readonly name: string;
age?: number;
}
const person1: Person = { name: 'js' };
person1.name = 'ljs'; // Error
let readOnlyArr: ReadonlyArray<number> = [1,2,3];
readOnlyArr.splice(0,1); // error
readOnlyArr.push(4); // error
readOnlyArr[0] = 100; // error
index type
interface Person {
readonly name: string;
[key: string]: string | number;
}
const p1: Person = { name: 'js', birthday: '비밀', age: 20 };
- 다음의 차이에 주목하자. index type은 지정해준 타입만 같다면 계속 추가할 수 있다.
- index signature
함수 타입
interface Print {
(name: string, age: number): string;
}
// type Print = (name: string, age: number) => string;
const getNameAndAge: Print = function (name, age) {
return `name: ${name}, age: ${age}`;
};
인터페이스 확장
interface Person {
name: string;
age: number;
}
interface Korean extends Person {
birth: 'KOR';
}
interface Korean {
name: string;
age: number;
birth: 'KOR';
}
interface Developer {
job: 'developer';
}
interface KorAndDev extends Korean, Developer {}
interface KorAndDev {
name: string;
age: number;
birth: 'KOR';
job: 'developer';
}
intersection Type: 여러 타입을 모두 만족하는 하나의 타입
interface Person {
name: string;
age: number;
}
interface Developer {
name: string;
skill: string;
}
type DevJob = Person & Developer;
const nbcPerson: DevJob = {
name: 'a',
age: 20,
skill: 'ts',
};
type vs interface
- 타입 별칭과 인터페이스의 가장 큰 차이점은 타입의 확장 가능 / 불가능 여부입니다.
- 인터페이스는 확장이 가능한데 반해 타입 별칭은 확장이 불가능합니다.
- 따라서, 가능한한 type 보다는 interface로 선언해서 사용하는 것을 추천합니다.
'내일배움캠프[4기_Reac트랙] > [원격]TS' 카테고리의 다른 글
9. 타입 추론 (0) | 2023.01.17 |
---|---|
8. 제네릭 (0) | 2023.01.17 |
6. Union 타입 / Type Alias (0) | 2023.01.16 |
5. enum 타입 (0) | 2023.01.16 |
4. 함수타입 (0) | 2023.01.16 |