반응형
리터럴 타입 좁히기
const sayGoodBye = "Goodbye World!" // "Goodbye World!"로 타입을 지정
let sayBye = "Bye World!" // 문자열로 타입을 지정
const 로 선언한 객체는 변하지 않기 때문에 타입스크립트는 이 문자열 타입을 "Goodbye World!"라는 단 하나의 타입으로 지정한다. 이것을 문자열 타입 좁히기라고 한다.
문자열 리터럴 타입
문자열 리터럴타입은 유니언타입, 타입 가드, 타입별칭과 잘 결합된다.
type Size = "small" | "large" | "xlarge";
const thisSize = (size:Size) => {
console.log(`this phone is too ${size}`);
}
thisSize("large")
thisSize("maximum") // error
// Argument of type '"maximum"' is not assignable to parameter of type 'Size'.
문자열 리터럴 타입은 오버로드처럼 사용될 수 있다. (좋은방법은 아닌듯.)
function category(category: "tech"): void;
function category(category: "media"): void;
function category(category: string):void {
console.log(`category is ${category}`)
}
category("tech")
category("IT") // error
// No overload matches this call.
// Overload 1 of 2, '(category: "tech"): void', gave the following error.
// Argument of type '"IT"' is not assignable to parameter of type '"tech"'.
// Overload 2 of 2, '(category: "media"): void', gave the following error.
// Argument of type '"IT"' is not assignable to parameter of type '"media"'.
숫자형 리터럴 타입
문자열 리터럴 타입과 같이 숫자형 리터럴 타입도 있다.
type Level = 1 | 2 | 3 | 4 | 5
const yourLevel = (level:Level) => {
console.log(`your level is ${level}`)
}
yourLevel(3);
yourLevel(99); // error
// Argument of type '99' is not assignable to parameter of type 'Level'.
반응형