자바스크립트는 덕 타이핑 기반이다.
어떤 함수의 매개변수 값을 모두 가지고 있다면 어떻게 생기던 상관없이 사용한다.
interface Person {
name: string;
age: number;
}
const me = { name: "수혁", age: 27, gender: "M" };
const introduce = (p: Person) => {
alert(`내 이름은 ${p.name}입니다. 나이는 ${p.age}입니다.`);
};
introduce(me);
me라는 객체는 Person의 type보다 gender라는 타입을 더 가지고 있지만 introduce 함수를 실행하는 것에 대한 아무런 문제가 없다.
함수를 만들 때 매개변수의 타입에 적혀있는 것들만 사용될 것이라고 생각한다. 이러한 타입을 '봉인된' 또는 '정확한' 타입이라고 부른다. 하지만 타입스크립트에서는 표현할 수 없다.
타입스크립트는 타입이 '열려'있다. 여기서 열려 있다는 것은 확장할 가능성이 있다는 것이다. 이러한 것을 구조적 타이핑이라고 한다.
구조적 타이핑, 덕 타이핑에 대한 개인적인 생각은 위의 코드로 예를 들어서 타입을 선언하게 되었을 때 Person이라는 타입에 name, age라는 속성을 넣을꺼야라고 하기보단 name, age의 속성을 가진 것들을 Person 타입이라고 부를 거야 라는 느낌이다.
'TypeScript' 카테고리의 다른 글
[TS] TypeScript 객체 프로퍼티 접근 (Index Signature) (0) | 2022.09.23 |
---|---|
keyof 연산자 (0) | 2021.12.23 |
declare 이란? (0) | 2021.12.15 |
tsc -w (0) | 2021.11.23 |
TypeScript 문법 (0) | 2021.11.06 |