[ts] 타입 추론

타입 추론

아래의 경우에는 아래와 같이 타입을 명시하지 않아도, 타입추론이 일어난다.

let v1 = 123; // number
let v2 = 'abc';  // string

const v1 = 123; // type이 123
const v2 = 'abc'; // type이 'abc'
let v3: typeof v1 = 234; // error
// let v3: typeof v1 = 123; // error 아님

const obj1 = { name: 'pius', age: 20, adult: true }
// obj: { id: string, age: number, adult: boolean }

Best common type

대부분의 경우에는 자동으로 타입추론이 일어나는데, 타입을 추론하는 방식은 best common type이다.

주어진 candidate들 중에서 공통의 것을 찾아서 타입을 정하는 것이다.

const arr1 = [10, 20, 30]; 
// arr: number[]

const arr2 = [1, 2, null, undefined];
// arr2: (number | null | undefined)[];

만약에 각 type이 공통의 super type을 가지고 있다고 하더라도, candidate에 super type이 없으면 이를 추론하지 못한다.

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

interface Korean extendns Person {
	liveInSeoul: boolean;
}

interface Japanese extends Person {
	liveInTokyo: boolean;
}

const p1:Person = { name: 'pius', age: 23 };
const p2:Korean = { name: 'mike', age: 25, liveInSeoul: true};
const p3:Japanese = { name: 'mike', age: 25, liveInTokyo: true};

const arr1 = [p1, p2, p3]; // arr1:Person[]
const arr2 = [p2, p3]; // 
위의 경우, arr2 변수의 타입이 arr2:(Korean Japanese)[] 인 이유는 p2, p3 중에서 super type이 존재하지 않기 때문이다.

Contextual Typing

#타입스크립트/타입추론