Written by
Dohu Jeon
on
on
[Typescript] 타입 호환 (type compatibility)
타입 호환 (type compatibility)
타입 호환이란 타입스크립트 코드에서 특정 타입이 다른 타입에 잘 맞는지를 의미한다.
인터페이스 (interface)
// 1. interface
interface Burger {
name: string;
ingredients: string;
}
interface Candy {
name: string;
}
let burger: Burger;
let candy: Candy;
// burger = candy; // 호환 불 가능
candy = burger; // 호환가능
burger에는 candy가 가진 속성과 타입이 부족하므로 호환이 안 된다
.
candy에는 burger가 가진 속성과 타입이 부족하므로 호환이 된다!
.
함수 (function)
// 2. function
let oneNum = function (a: number) {
// ...
}
let twoNum = function (a: number, b: number) {
// ...
}
// oneNum = twoNum //
twoNum = oneNum //
oneNum에는 인자가 하나 들어가있어 인자를 두 개 넘기는 twoNum은 호환이 안 된다
.
twoNum에는 인자가 두개가 들어가있어 인자를 한 개 넘기는 oneNum은 호환이 된다
.
제네릭 (Generic)
// 3. Generic
interface Empty<T> {
// ...
}
let empty1: Empty<string>;
let empty2: Empty<number>;
// 제네릭에 들어가는 타입은 다르지만 인터페이스 내부는 비어있으므로 호환이 됨!
empty1 = empty2
empty2 = empty1
제네릭을 가지고 있는 Empty
인터페이스를 받아 타입을 다르게 두 변수에 넣었다.
인터페이스 내부는 비어있으므로 둘은 호환이 된다.
interface NotEmpty<T>{
data: T;
}
let notEmpty1: NotEmpty<string>;
let notEmpty2: NotEmpty<number>;
// 제네릭에 들어가는 다른 타입이 각 속성에 들어가기 때문에 호한이 안 됨
// notEmpty1 = notEmpty2;
// notEmpty2 = notEmpty1;
여기서는 제네릭을 가지고 있는 NotEmpty
인터페이스에 제네릭 타입을 가지고 data속성을 추가해서 넣었다.
이 인터페이스를 받아 두 변수를 선언한 후 호환 체크를 하니 호환이 안 된다고 나온다.
다른 타입이 각 속성에 들어가기 때문에 호한이 안 된다.
Discussion and feedback