SPACE RUMI

Hi, I am rumi. Let's Splattack!

[STUDY] 스터디/TypeScript

[Typescript] 타입스크립트 리터럴 / typescript literal types / 문자열 리터럴, 숫자형 리터럴 타입

백루미 2023. 6. 16. 12:41
반응형

리터럴 타입 좁히기

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'.
반응형