TypeScript

[TS] TypeScript 구조적 타이핑, 덕 타이핑

눙엉 2022. 12. 30. 00:02

자바스크립트는 덕 타이핑 기반이다.

어떤 함수의 매개변수 값을 모두 가지고 있다면 어떻게 생기던 상관없이 사용한다.

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