๐ŸŽ‰ berenickt ๋ธ”๋กœ๊ทธ์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
Lang
TypeScript
06-Literal

1. Literal Narrowing(๋ฆฌํ„ฐ๋Ÿด ์ขํžˆ๊ธฐ)

literal type(๋ฆฌํ„ฐ๋Ÿด ํƒ€์ž…)

  • string, number ๊ฐ™์€ ๊ฒƒ๋งŒ ํƒ€์ž…์ด ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ๋ฌธ์ž์—ด๋„ ํƒ€์ž…์ด ๋  ์ˆ˜ ์žˆ์Œ
  • ํŠน์ • ๊ธ€์ž๋‚˜ ์ˆซ์ž๋งŒ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ฒŒ ์ œํ•œ์„ ๋‘๋Š” ํƒ€์ž…์„ literal type์ด๋ผ๊ณ  ๋ถ€๋ฆ„
  • const๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ์„ ์–ธํ•  ๋•Œ, let์€ ๋ณ€ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์„ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉ
1
// ๋งˆ์šฐ์Šค๋ฅผ ์˜ฌ๋ ค ํƒ€์ž…์„ ํ™•์ธํ•ด๋ณด๋ฉด,
2
const userName1 = '๋ฉ”์‹œ' // '๋ฉ”์‹œ' ํƒ€์ž…
3
let userName2 = 'ํ˜ธ๋‚ ๋‘' // string ํƒ€์ž…

2. String Literal Types

1
let ๋ฐฉํ–ฅ: 'left' | 'right' | 'top' | 'bottom'
2
๋ฐฉํ–ฅ = 'left'

3. Numeric Literal Types

์ˆซ์ž๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

1
function rollDice(): 1 | 2 | 3 | 4 | 5 | 6 {
2
return (Math.floor(Math.random() * 6) + 1) as 1 | 2 | 3 | 4 | 5 | 6
3
}
4
5
const result = rollDice()

์ฃผ๋กœ ์„ค์ •๊ฐ’์„ ์„ค๋ช…ํ•  ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค:

1
/** loc/lat ์ขŒํ‘œ์— ์ง€๋„๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. */
2
declare function setupMap(config: MapConfig): void
3
// ---์ƒ๋žต---
4
interface MapConfig {
5
lng: number
6
lat: number
7
tileSize: 8 | 16 | 32
8
}
9
10
setupMap({ lng: -73.935242, lat: 40.73061, tileSize: 16 })

4. as const ๋ฌธ๋ฒ•

'kim'ํƒ€์ž…๋งŒ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ, ์ž๋ฃŒ.name์„ ์ž…๋ ฅํ•˜๊ณ  ์‹ถ๋‹ค๋ฉดโ€ฆ

1
let ์ž๋ฃŒ = {
2
name: 'kim',
3
}
4
5
function onlyKim(a: 'kim') {}
6
onlyKim(์ž๋ฃŒ.name) // string ํƒ€์ž…์ธ๊ฑฐ์ง€, 'kim'ํƒ€์ž…์ด ์•„๋‹˜
7
// onlyKim()์€ 'kim'์ด๋ผ๋Š” ํƒ€์ž…๋งŒ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ์Œ
8
// ๐Ÿ’ฅ Argument of type 'string' is not assignable to parameter of type '"kim"'

์œ„ ์—๋Ÿฌ๋ฅผ ํ•ด๊ฒฐํ•˜๊ณ  ์‹ถ์œผ๋ฉด

  1. object ๋งŒ๋“ค ๋•Œ ํƒ€์ž…์„ ๋ฏธ๋ฆฌ ์ •์˜
  2. assertion์„ ์“ฐ๊ธฐ (as โ€˜kimโ€™ ๋ถ™์ด๊ธฐ)
  3. as const๋ฅผ object ์ž๋ฃŒ์— ๋ถ™์ด๊ธฐ
1
let ์ž๋ฃŒ = {
2
name: 'kim',
3
} as const
4
5
// 1. ํƒ€์ž…์„ object์˜ value๋กœ ๋ฐ”๊ฟ”์คŒ (ํƒ€์ž…์„ 'kim'์œผ๋กœ ๋ฐ”๊ฟ”์ค)
6
// 2. object์•ˆ์— ์žˆ๋Š” ๋ชจ๋“  ์†์„ฑ์„ readonly๋กœ ๋ฐ”๊ฟ”์คŒ (๋ณ€๊ฒฝํ•˜๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒํ•˜๋„๋ก)
7
function onlyKim(a: 'kim') {}
8
onlyKim(์ž๋ฃŒ.name)

object๋ฅผ ์ž ๊ทธ๊ณ  ์‹ถ์œผ๋ฉด, as const๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.