자바스크립트는 본질적으로 덕 타이핑(duck typing) 기반입니다. 만약 어떤 함수의 매개변수 값이 모두 제대로 주어진다면, 그 값이 어떻게 만들어졌는지 신경 쓰지 않고 사용합니다. 타입스크립트도 이러한 동작을 그대로 모델링 했습니다.
이와 관련된 동작을 구조적 타이핑으로 이해 할 수 있습니다.
아래는 예제는 구조적 타이핑이 어떻게 동작하는지를 보여 줍니다.
|
interface Vector2D {
x: number;
y: number;
}
interface Vector3D extends Vector2D {
z: number;
}
function calcLen(v: Vector2D) {
return Math.sqrt(v.x * v.x + v.y * v.y);
}
const v3d: Vector3D = {
x: 1,
y: 2,
z: 3
}
calcLen(v3d); // 정상임
|
Vector2D에서 존재하는 모든 속성이 Vector3D에서도 모두 존재하기 때문에 타입 스크립트는 '구조적 타이핑' 관점에서 오류가 아니라고 판단합니다.
구조적 타이핑은 클래스와 관련된 할당문에서도 당혹스러운 결과를 보여줍니다.
클래스의 타입의 변수가 클래스의 모든 속성을 만족하는 리터럴 객체로 초기화가 가능합니다.(
|
class C {
foo: string;
constructor(foo: string){
this.foo = foo;
}
}
const c = new C('instance of C');
const d: C = { foo: 'object literal'} // 정상
|
'IT' 카테고리의 다른 글
| Effective Typescript - 7 - 타입이 값들의 집합이라고 이해하기 (0) | 2022.01.24 |
|---|---|
| Effective Typescript - 5 - any 타입 지양하기 (0) | 2022.01.24 |
| Effective Typescript - 3 - 코드 생성과 타입이 관계없음을 이해하기 (0) | 2022.01.24 |
| Effective Typescript - 2 - 타입스크립트 설정 이해하기 (0) | 2022.01.24 |
| Effective Typescript - 1 - 타입스크립트와 자바스크립트의 관계 이해하기 (0) | 2022.01.24 |