Number
타입과 Number Literal
타입의 관계어떤 타입을 다른 타입으로 취급해도 괜찮은지 판단하는 것
literal타입을 number타입에 할당하는 것
vs number타입을 literal타입에 할당하는 것
let num1: number = 10;
let num2: 10 = 10;
num1 = num2 // ✅가능
let num1: number = 10;
let num2: 10 = 10;
num2 = num1 // ❌오류
아래 계층도를 참고하여 타입간 관계를 확인해보자.
function unknownExam() {
// 아래는 업캐스팅
let a: unknown = 1;
let b: unknown = "hello";
let c: unknown = true;
let d: unknown = null;
let e: unknown = undefined;
let unknownVar: unknown;
// 아래는 다운캐스팅
let num: number = unknownVar; // ❌
let str: string = unknownVar; // ❌
let bool: boolean = unknownVar; // ❌
}
function neverExam() {
// 반환하는 값의 종류가 공집합이다.
function neverFunc(): never {
while (true) {}
}
// 아래는 업캐스팅
let num: number = neverFunc();
let str: string = neverFunc();
let bool: boolean = neverFunc();
// 아래는 다운캐스팅
let never1: never = 10; // ❌
let never2: never = "string"; // ❌
let never3: never = true; // ❌
}
void
타입은 undefined
타입의 super타입이다. → undefined
타입을 void
타입의 변수에 넣을 수 있다.function voidExam() {
// 반환값이 없는 함수
function voidFunc(): void {
console.log("hi");
return undefined;
}
let voidVar: void = undefined; // ✅
}
function anyExam() {
let unknownVar: unknown;
let anyVar: any;
let undefinedVar: undefined;
let neverVar: never;
// 업캐스팅, 다운캐스팅 모두 가능
anyVar = unknownVar; // ✅
undefinedVar = anyVar; // ✅
// never타입은 예외
neverVar = anyVar; // ❌
}