[typescript] 타입스크립트에서의 타입 호환성의 개념

타입스크립트(TypeScript)는 JavaScript에 타입 시스템을 추가한 언어로, 타입 호환성(타입 호환, type compatibility) 또한 중요한 개념이다. 타입 호환성은 한 타입이 다른 타입으로 변환될 수 있는지에 대한 여부를 나타낸다.

구조적 타이핑(Structural Typing)

타입스크립트는 구조적 타이핑을 지원하는데, 이는 변수나 파라미터의 타입이 명시된 타입과 구조적으로 호환되면 그것이 호환성을 가지게 된다는 것을 의미한다. 이는 명시적인 인터페이스 구현을 요구하지 않고, 단지 유사한 구조를 가지고 있으면 호환성이 성립된다.

예제

interface Person {
    name: string;
    age: number;
}

let person1: Person;
person1 = { name: 'John', age: 30 };

let person2 = { name: 'Jane', age: 25, gender: 'female' };
person1 = person2; // 구조적으로 호환되어 할당 가능

위의 예제에서 person2Person 인터페이스를 구현하지 않았지만, nameage라는 필수 속성을 가지고 있기 때문에 person1에 할당할 수 있다.

함수 호환성

함수 간의 타입 호환성도 중요한데, 매개변수의 타입과 반환 값의 타입이 할당 가능한지를 판단한다. 이는 함수 시그니처의 일관성을 유지하면서 다양한 함수를 상호 교환 가능하게 만든다.

예제

type CompareFunc = (a: number, b: number) => boolean;

function isBigger(a: number, b: number): boolean {
    return a > b;
}

let compFunc: CompareFunc;
compFunc = isBigger; // 할당 가능

위의 예제에서 isBigger 함수가 CompareFunc의 시그니처와 일치하므로 호환성을 가진다.

타입 호환성은 타입스크립트에서 코드의 유연성을 높이고, 코드 재사용성을 장려하는 중요한 원칙이다.

참고 자료