더북(TheBook)

또 특이한 점이 몇 가지 있습니다. 먼저 nullundefinedlet 변수에 대입할 때는 any로 추론합니다. 이 점은 기억해두는 것이 좋습니다.

symconst일 때는 typeof sym이었는데, let일 때는 symbol입니다. typeof sym은 고유한 symbol을 의미합니다. const이므로 다른 symbol로 변경할 수 없는 symbol인 것이죠. 타입스크립트는 이를 unique symbol이라고 표현합니다. unique symbol끼리는 서로 비교할 수 없습니다. 다만 unique symbol과 일반 symbol끼리나, 두 개의 일반 symbol끼리는 비교할 수 있습니다.

const sym1 = Symbol.for('sym'); // unique symbol
const sym2 = Symbol.for('sym'); // unique symbol
let sym3 = Symbol.for('sym');
let sym4 = Symbol.for('sym');

if (sym1 === sym2) {} 
// This comparison appears to be unintentional because the types 'typeof sym1' and 'typeof sym2' have no overlap.
if (sym3 === sym4) {}
if (sym2 === sym3) {}

앞의 예제는 자바스크립트에서는 문제가 없는 코드입니다. sym1 === sym2true입니다. 하지만 타입스크립트에서는 unique symbol끼리의 비교를 금지하고 있습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.