타입스크립트 spread 이슈

장동혁·2021년 8월 12일
0

typescript

목록 보기
1/1

개요

타입스크립트 코드를 작성하던 도중 spread 연산자로 다른 객체의 값을 복사해 오는 과정에서 타입 안정성이 깨지는 이슈를 발견했다. 구글링해보니 여러 사람이 깃헙 issue에 등록한 것을 확인할 수 있었지만 아직 해결되지 않았다.

예제

interface I { 
    a: number;
    b: string;
}

const obj = { c: true };

const i: I = { a: 0, b: "s", c: obj.c }; // Error, unknown property c
const i: I = { a: 0, b: "s", ...obj }; // No error here.

인터페이스 Ia, b 두개의 필드만 가질 수 있기 때문에 obj.c라는 필드를 할당하려고 하면 컴파일 에러가 난다. 하지만 spread로 obj의 값을 받아오게 되면 에러가 발생하지 않는다. 런타임 상황에서는 ic필드를 보유하게 되기 때문에 타입 안정성이 깨지게 된다. 이 이슈는 Object.assign 메서드에서도 발생한다.

interface I {
  a: number;
  b: string;
}

const obj = { c: true };
const i: I = Object.assign({ a: 0, b: "s" }, obj); // No error here.

이슈를 close한 것을 보면 개발팀에서도 인지하고 있지만 이슈로 바라보고 있지는 않는 것 같다. 실제로 i.c에 접근하게 되면 컴파일 에러가 발생하기 때문일 것 같다고 추측해본다.

관련 이슈

https://github.com/microsoft/TypeScript/issues/12717

profile
기록하는 습관

0개의 댓글