TypeScript의 Type은 어떻게 나누어지는가?
1. Static
정적 유형은 "컴파일 타임" 또는 "프로그램을 실행하지 않고" 이미 알고있는 유형을 의미
user-defined type(function, tuple, array, object ...), primitive type(string, number, boolean ...) 으로 세부 분류.
2. Generic
Generic은 단일 데이터 형식이 아닌 다양한 데이터 형식으로 작업할 수 있는 구성 요소를 만드는 데 사용
3. Decorators
클래스 선언, 메서드, 속성, 접근자 및 매개변수에 첨부할 수 있는 특수한 데이터 유형
let any: any
let number: number = 5
let never: never = any // ❌ ⬇️downcast(explicit)
// Type 'any' is not assignable to type 'never'.ts(2322)
never = number // ❌ ⬇️downcast(explicit)
number = never // ✅ ⬆️upcast(implicit)
❗️타입은 upcast로 할당 가능하며, 반대의 경우는 불가하다.
❗️never = 공집합, 즉 어떤 값도 가질 수 없다.
Null
null 값만 할당이 가능
함수 반환 유형 void와 never의 차이
“값이 없다.”는 의미로 같다고 생각할 수 있으나, 차이가 존재한다.
void
무시하려는 반환 값의 유형은 void가 된다.
JavaScript에서 반환 값이 없는 함수는 암묵적으로 undefined를 반환한다.
즉, 무시하려는 반환 값의 유형은 void가 된다.
// Type () => void
const getVoid2 = () => {};
const getVoid3 = function() {};
never
정상적으로 완료될 수 없는 반환 값.
즉, 오류 혹은 무한루프가 never로 표현 된다.
// Type () => never
const getNever1 = () => {
while (true) {}
};
const getNever2 = function () {
throw new Error();
};
참고사항
// ❗ Type () => void
function getNever31() {
while (true) {}
}
함수 선언식은 왜 void로 추론될까? TypeScript never type inference
'개발 > type-challenges' 카테고리의 다른 글
타입스크립트 타입 정복: Polymorphic Function (0) | 2022.09.23 |
---|---|
타입스크립트 타입 정복: Opaque (1) | 2022.08.06 |
타입스크립트 타입 정복: Type Guards와 Narrowing (0) | 2022.08.02 |
타입스크립트 타입 정복: Conditional Types (0) | 2022.07.12 |
타입스크립트 타입 정복: 내장 유틸리티 타입을 만들어보자 (0) | 2022.07.02 |