Structural Type System
// 구조가 같으면, 같은 타입이다.
// 둘이 구조가 같다. 서로 대입이 가능하다.
// TS 는 이 방식을 따른다.
interface IPerson {
name: string;
age:number;
speak(): string;
}
type PersonType = {
name: string;
age:number;
speak(): string;
}
let personInterface: IPerson = {} as any;
let personType: PersonType = {} as any;
personInterface = personType;
personType = personInterface;
Nominal Type System
// 구조가 같아도 이름이 다르면 다른 타입니다.
type PersonID = string & { readonly brand: unique symbol };
function PersonID(id: string): PersonID {
return id as PersonID;
}
function getPersonById(id: PersonID) {}
getPersonById(PersonID('id-aaaaaa'));
getPersonById('id-aaaaaa'); // error! 입니다. 반드시 PersonID 로 치환해야 합니다.