설명
타입 넓히기(type widening)
변수를 초기화 시 타입이 명시되지 않았을 때 지정된 값을 토대로 가능한 값들의 집합을 유추하는 과정
/**
const arr: (string | number)[]
const arr: [1, '2']
const arr: any[]
*/
const arr = [1, '2'];
타입 넓히기 방지
일반적인 객체 선언
/**
const v1: {
x: number;
y: number;
}
*/
const v1 = {
x: 1,
y: 2
}
프로퍼티에 const 단언 사용
as const 사용 시 타입스크립트는 최대한 좁은 타입으로 추론
/**
const v2: {
x: 1;
y: number;
}
*/
const v2 = {
x: 1 as const,
y: 2
};
// Type '2' is not assignable to type '1'.(2322)
v2.x = 2;
객체에 const 단언 사용
/**
const v3: {
readonly x: 1;
readonly y: 2;
}
*/
const v3 = {
x: 1,
y: 2
} as const
// Cannot assign to 'x' because it is a read-only property.(2540)
v3.x = 2;