์ƒˆ์†Œ์‹

FrontEnd/TypeScript

[TypeScript] Literal Types

  • -

๐Ÿฃ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—!


์ด๋ฒˆ์—๋Š” Literal Types์— ๋Œ€ํ•ด์„œ ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค. ํŠน์ • ๊ฐ’๋“ค์˜ ์œ ํ˜•์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š”๊ฑด๋ฐ ๊ฐœ๋…๊ณผ ๋ฌธ์ œ์ ์„ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž๊พธ!

 

https://t1.daumcdn.net/cafeattach/Uzlo/60326dc1be2af3deff39ff2415f6e71011217ad1

 

 

ํ˜น์‹œ ์ง€๋‚œ ๊ฒŒ์‹œ๊ธ€์ด ๊ถ๊ธˆํ•˜๋‹ค๋ฉด?
 

[TypeScript] ํƒ€์ž… ๋ณ€์ˆ˜ type alias

๐Ÿฃ ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—!์ด๋ฒˆ์—” type alias์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด๊ฒ ๋‹ค. ์‚ฌ์‹ค type alias๋ผ๊ณ  ํ•˜๋ฉด ์œผ์ž‰? ํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๋‹ค๋“ค ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ƒฅ type์„ ๋ณ€์ˆ˜์— ๋‹ด์•„ ์‚ฌ

haileyham.tistory.com

 

 

๐Ÿฃ  Literal Types


1. ๊ฐœ๋…

๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž…์€ TypeScript์—์„œ ํŠน์ • ๊ฐ’๋“ค์˜ ์œ ํ˜•์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ. ๋ณ€์ˆ˜๋‚˜ ์†์„ฑ์ด ํŠน์ •ํ•œ ๊ฐ’๋งŒ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œํ•˜๋Š” ๋ฐฉ์‹. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฌธ์ž์—ด์ด๋‚˜ ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด, ๋ถˆ๋ฆฌ์–ธ ๋ฆฌํ„ฐ๋Ÿด ๋“ฑ์œผ๋กœ ํƒ€์ž…์„ ์„ ์–ธํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ  ์ž˜๋ชป๋œ ๊ฐ’ ์ž…๋ ฅ์„ ๋ฐฉ์ง€.

 

2. ํŠน์ง•

  • ๋” ์—„๊ฒฉํ•˜๊ฒŒ ๋ณ€์ˆ˜ ํƒ€์ž… ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • ํŠน์ • ๊ธ€์ž๋‚˜ ์ˆซ์ž๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋„๋ก ์ œํ•œ์„ ๋‘๋Š” ํƒ€์ž…
  • Literal type์€ const ๋ณ€์ˆ˜์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์ˆซ์ž์—๋Š” 123๋งŒ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ

let ์ˆซ์ž : 123;
์ˆซ์ž = 4 // error - 123์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ

 

 

Literal type์€ const ๋ณ€์ˆ˜์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

const ๋ณ€์ˆ˜1 = 'ham'; //const ๋ณ€์ˆ˜๋Š” 1๊ฐœ์˜ ๊ฐ’๋งŒ, ๊ฐ’์„ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ๋ณ€์ˆ˜
let ๋ณ€์ˆ˜2: '๊ฐ•์•„์ง€' | '๊ณ ์–‘์ด'; // ๊ฐ•์•„์ง€or๊ณ ์–‘์ด ์ค‘์— ํ•˜๋‚˜ (const ๋ณ€์ˆ˜ ์—…๊ธ€๋ฒ„์ „์ด๋ผ ์ƒ๊ฐ)
 

 

2. ์ฝ”๋“œ๋กœ ์‚ดํŽด๋ณด๊ธฐ!

์•„๋ž˜์˜ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด

  • ์ˆซ์ž literal type ์˜ˆ์ œ๋ฅผ ๋ณด๋ฉด
    • score์€ 1, 2, 3, 4, 5 ์ค‘ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ, 3์˜ ๊ฐ’์„ ๊ฐ–๊ณ  ์žˆ์œผ๋‹ˆ ์ถœ๋ ฅ ๊ผฌ์šฐ!
  • ๋ฌธ์ž์—ด literal type ์˜ˆ์ œ
    • Direction ํƒ€์ž…์€ 'left', 'right', 'up', 'down' ์ค‘ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด, right ์ถœ๋ ฅ ๊ผฌ์šฐ!
  • boolean literal type ์˜ˆ์ œ
    • isAdmin ๋ณ€์ˆ˜๋Š” true ๋˜๋Š” false ์ค‘ ํ•˜๋‚˜์˜ ๊ฐ’, true ๊ผฌ์šฐ!
  • ํ•จ์ˆ˜์˜ literal type ์˜ˆ์ œ
    • function ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ’์€ 'hello'๋งŒ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๊ณ , ๋ฐ˜ํ™˜๊ฐ’์ด 1 ํ˜น์€ 0์ด๊ธฐ ๋•Œ๋ฌธ์— return ๊ฐ’ 1 ๋ฟœ!
// ์ˆซ์ž ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž… ์˜ˆ์ œ
// score ๋ณ€์ˆ˜๋Š” 1, 2, 3, 4, 5 ์ค‘ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ.
let score: 1 | 2 | 3 | 4 | 5 = 3; 
console.log(score); // ์ถœ๋ ฅ: 3

// ๋ฌธ์ž์—ด ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž… ์˜ˆ์ œ
// Direction ํƒ€์ž…์€ 'left', 'right', 'up', 'down' ์ค‘ ํ•˜๋‚˜์˜ ๋ฌธ์ž์—ด๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ.
type Direction = 'left' | 'right' | 'up' | 'down'; 
let direction: Direction = 'right';
console.log(direction); // ์ถœ๋ ฅ: right

// ๋ถˆ๋ฆฌ์–ธ ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž… ์˜ˆ์ œ
// isAdmin ๋ณ€์ˆ˜๋Š” true ๋˜๋Š” false ์ค‘ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ.
let isAdmin: true | false = true; 
console.log(isAdmin); // ์ถœ๋ ฅ: true

// ํ•จ์ˆ˜
function ํ•จ1(a: 'hello') : 1 | 0 { //ํ•จ์ˆ˜ํŒŒ๋ผ๋ฏธํ„ฐ์— hello๋งŒ ๋“ค์–ด์˜ค๋„๋ก ์ œํ•œ / return ๊ฐ’์œผ๋กœ 1๊ณผ 0๋งŒ ๋ฐ›๋„๋ก ์ œํ•œ
    return 1;
};
ํ•จ1('hello'); //ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค ์ œํ•œํ–ˆ๊ธฐ์— ๋‹ค๋ฅธ ๊ฒƒ ์ž…๋ ฅํ•˜๋ฉด ์—๋Ÿฌ

 

 

๐Ÿฃ Literal Types ์˜ ๋ฌธ์ œ์ 


1. ๋ฌธ์ œ์ ?

๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž…์˜ ์ฃผ์š” ๋ฌธ์ œ๋Š” ์ฝ”๋“œ์˜ ์œ ์—ฐ์„ฑ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ . ํŠน์ • ๊ฐ’๋“ค์—๋งŒ ์ œํ•œ๋œ ํƒ€์ž…์„ ์ •์˜ํ•˜๋ฉด, ํ•„์š”ํ•œ ๋ณ€๊ฒฝ์ด๋‚˜ ํ™•์žฅ์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Œ. ๋•Œ๋•Œ๋กœ ๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฝ”๋“œ๊ฐ€ ์ง€๋‚˜์น˜๊ฒŒ ๊ตฌ์ฒดํ™”๋˜์–ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›Œ์งˆ ์ˆ˜ ์žˆ์Œ. ๋˜ํ•œ ํ•ด๊ฒฐ๋ฒ•์œผ๋กœ as const ๋ฌธ๋ฒ•์„ ๋“ค ์ˆ˜ ์žˆ์Œ.

let ์ž๋ฃŒ = {
    name : 'ham'
}

//'ham'์ด๋ผ๋Š” ์ž๋ฃŒ๋งŒ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ(x)/'ham'์ด๋ผ๋Š” ํƒ€์ž…๋งŒ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ(O)
function ๋‚ดํ•จ์ˆ˜๋„ค(a : 'ham') { 
    
}
๋‚ดํ•จ์ˆ˜๋„ค('ham');

 

 

2. ์—๋Ÿฌ ์•ˆ ๋‚˜๋ ค๋ฉด?

1. object ๋งŒ๋“ค ๋•Œ ํƒ€์ž…์ง€์ • ํ™•์‹คํžˆ
2. as ๋ฌธ๋ฒ•์œผ๋กœ ํƒ€์ž… ๋ฎ์–ด์“ฐ๊ธฐ
3. as const ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ
  - ํšจ๊ณผ1 : object value ๊ฐ’์„ ํƒ€์ž…์œผ๋กœ ์ง€์ •
  - ํšจ๊ณผ2 : object ์†์„ฑ๋“ค์— ๋ชจ๋‘ readonly ๋ถ™์—ฌ์คŒ

 

//๋ฐฉ๋ฒ• 1 : object ๋งŒ๋“ค ๋•Œ ํƒ€์ž…์ง€์ •์„ ํ™•์‹คํžˆ 
let ์ž๋ฃŒ1: {
    name : 'ham'
} = {
    name : 'ham'
}

๋‚ดํ•จ์ˆ˜๋„ค(์ž๋ฃŒ1.name); 
//์œ„์—์„œ์ฒ˜๋Ÿผ ์ž๋ฃŒ.name์„ ํ–ˆ์ง€๋งŒ ์—๋Ÿฌ ๋ฐœ์ƒ์•ˆํ•จ
// ์™œ๋ƒํ•˜๋ฉด object์— type์„ hamํƒ€์ž…์œผ๋กœ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ

---------------------------------------- 

//๋ฐฉ๋ฒ• 2 : as ๋ฌธ๋ฒ•์œผ๋กœ ํƒ€์ž… ๋ฎ์–ด์“ฐ๊ธฐ
๋‚ดํ•จ์ˆ˜๋„ค(์ž๋ฃŒ.name as 'ham')

---------------------------------------- 

//๋ฐฉ๋ฒ•3 : as const ํ‚ค์›Œ๋“œ ์‚ฌ์šฉ : ์ด object๋Š” literal type ์ง€์ • ์•Œ์•„์„œ ํ•ด์ฃผ๊ธฐ
//as const ํšจ๊ณผ 1: object value ๊ฐ’์„ ๊ทธ๋Œ€๋กœ ํƒ€์ž…์œผ๋กœ ์ง€์ •
//as const ํšจ๊ณผ 2: object ์†์„ฑ๋“ค์— ๋ชจ๋‘ readonly ๋ถ™์—ฌ์คŒ(๋ณ€๊ฒฝํ•˜๋ฉด ์—๋Ÿฌ๋‚˜๋„๋ก)
//object ์ž๋ฃŒ๋ฅผ ์™„์ „ํžˆ ์ž ๊ฐ€๋†“๊ณ  ์‹ถ์œผ๋ฉด as const ์‚ฌ์šฉ
let ์ž๋ฃŒ2 = {
    name : 'ham'
} as const; 

// ์ž๋ฃŒ2.name = 'hi' //as const๊ฐ€ readonly ํšจ๊ณผ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด ์—๋Ÿฌ๋ฐœ์ƒ

๋‚ดํ•จ์ˆ˜๋„ค(์ž๋ฃŒ2.name);

 

 


๋ฆฌํ„ฐ๋Ÿดํƒ€์ž…๋„!

 

Contents

ํฌ์ŠคํŒ… ์ฃผ์†Œ๋ฅผ ๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค

์ด ๊ธ€์ด ๋„์›€์ด ๋˜์—ˆ๋‹ค๋ฉด ๊ณต๊ฐ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.