[typescript] type widening

설명

타입 넓히기(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;

links

social