아이템 8. 타입 공간과 값 공간의 심벌 구분하기 #
타입스크립트의 심벌(symbol)은 타입 공간, 값 공간 중 한 곳에 존재한다.
쉽게 말하면, 같은 네이밍을 가진 심벌은 타입이 될 수도, 값이 될 수도 있다는 의미이다.
// 'Cylinder' 라는 심볼은 '타입'이다.
interface Cylinder {
radius: number;
height: number;
}
// 'Cylinder' 라는 심볼은 '값'이다.
const Cylinder = { radius: number, height: number} => ({ radius, height });
한 심벌이 ‘타입’인지, ‘값’인지 알기 위해서는 ‘문맥’을 살펴 알아냐애 한다.
이 부분은 혼란을 야기하곤 한다.
키워드 | 설명 |
---|---|
type | 타입 |
interface | 타입 |
const | 값 |
let | 값 |
class | 타입 / 값 |
enum | 타입 / 값 |
연산자 중 ‘타입’에서 쓰일 때, ‘값’에서 쓰일 때 다른 기능을 하는 것들이 있다. #
typeof
예시를 살펴본다.
type T1 = typoof p; // 타입 : Person
type T2 = typeof email; // 타입 : (p: Person, subject: string, body: string) => Response
const v1 = typeof p; // 값 : "object"
const v2 = typeof email;// 값 : "function"
‘타입’ 관점 → 타입스크립트 ‘타입’ 을 반환
‘값’ 관점 → 자바스크립트 런타임의 typeof 연산자 (= 런타임 타입을 가리키는 문자열 반환, 타입스크립트 타입과는 다르다.)
* 타입스크립트 타입은 무수히 많다. (사용자가 계속해서 정의 가능)
* 자바스크립트 타입은 단 6개이다. (런타임타입 : string, number, boolean, undefined, object, function)
작성중…