1. Literal Narrowing(๋ฆฌํฐ๋ด ์ขํ๊ธฐ)
literal type(๋ฆฌํฐ๋ด ํ์
)
string, number๊ฐ์ ๊ฒ๋ง ํ์ ์ด ๋ ์ ์๋ ๊ฒ์ด ์๋๋ผ ๋ฌธ์์ด๋ ํ์ ์ด ๋ ์ ์์- ํน์ ๊ธ์๋ ์ซ์๋ง ๊ฐ์ง ์ ์๊ฒ ์ ํ์ ๋๋ ํ์
์
literal type์ด๋ผ๊ณ ๋ถ๋ฆ const๋ ๋ณํ์ง ์๋ ๊ฐ์ ์ ์ธํ ๋,let์ ๋ณํ ์ ์๋ ๊ฐ์ ์ ์ธํ ๋ ์ฌ์ฉ
1// ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ค ํ์ ์ ํ์ธํด๋ณด๋ฉด,2const userName1 = '๋ฉ์' // '๋ฉ์' ํ์3let userName2 = 'ํธ๋ ๋' // string ํ์
2. String Literal Types
1let ๋ฐฉํฅ: 'left' | 'right' | 'top' | 'bottom'2๋ฐฉํฅ = 'left'
3. Numeric Literal Types
์ซ์๋ ๊ฐ๋ฅํฉ๋๋ค.
1function rollDice(): 1 | 2 | 3 | 4 | 5 | 6 {2return (Math.floor(Math.random() * 6) + 1) as 1 | 2 | 3 | 4 | 5 | 63}45const result = rollDice()
์ฃผ๋ก ์ค์ ๊ฐ์ ์ค๋ช ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค:
1/** loc/lat ์ขํ์ ์ง๋๋ฅผ ์์ฑํฉ๋๋ค. */2declare function setupMap(config: MapConfig): void3// ---์๋ต---4interface MapConfig {5lng: number6lat: number7tileSize: 8 | 16 | 328}910setupMap({ lng: -73.935242, lat: 40.73061, tileSize: 16 })
4. as const ๋ฌธ๋ฒ
'kim'ํ์
๋ง ๋ค์ด์ฌ ์ ์๋ ํจ์๋ฅผ ๋ง๋ค์๋๋ฐ, ์๋ฃ.name์ ์
๋ ฅํ๊ณ ์ถ๋ค๋ฉดโฆ
1let ์๋ฃ = {2name: 'kim',3}45function onlyKim(a: 'kim') {}6onlyKim(์๋ฃ.name) // string ํ์ ์ธ๊ฑฐ์ง, 'kim'ํ์ ์ด ์๋7// onlyKim()์ 'kim'์ด๋ผ๋ ํ์ ๋ง ๋ค์ด์ฌ ์ ์์8// ๐ฅ Argument of type 'string' is not assignable to parameter of type '"kim"'
์ ์๋ฌ๋ฅผ ํด๊ฒฐํ๊ณ ์ถ์ผ๋ฉด
- object ๋ง๋ค ๋ ํ์ ์ ๋ฏธ๋ฆฌ ์ ์
- assertion์ ์ฐ๊ธฐ (as โkimโ ๋ถ์ด๊ธฐ)
- as const๋ฅผ object ์๋ฃ์ ๋ถ์ด๊ธฐ
1let ์๋ฃ = {2name: 'kim',3} as const45// 1. ํ์ ์ object์ value๋ก ๋ฐ๊ฟ์ค (ํ์ ์ 'kim'์ผ๋ก ๋ฐ๊ฟ์ค)6// 2. object์์ ์๋ ๋ชจ๋ ์์ฑ์ readonly๋ก ๋ฐ๊ฟ์ค (๋ณ๊ฒฝํ๋ฉด ์๋ฌ ๋ฐ์ํ๋๋ก)7function onlyKim(a: 'kim') {}8onlyKim(์๋ฃ.name)
object๋ฅผ ์ ๊ทธ๊ณ ์ถ์ผ๋ฉด, as const๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.