[TypeScript] Literal Types
- -
๐ฃ ๋ค์ด๊ฐ๊ธฐ ์ ์!
์ด๋ฒ์๋ Literal Types์ ๋ํด์ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ๋ค. ํน์ ๊ฐ๋ค์ ์ ํ์ ์ ์ํ ์ ์๋๊ฑด๋ฐ ๊ฐ๋ ๊ณผ ๋ฌธ์ ์ ์ ์ดํด๋ณด๋๋ก ํ์๊พธ!
ํน์ ์ง๋ ๊ฒ์๊ธ์ด ๊ถ๊ธํ๋ค๋ฉด?
[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);
๋ฆฌํฐ๋ดํ์ ๋!
'FrontEnd > TypeScript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TypeScript] ๊ฐ์ฒด์ ํ์ interface (0) | 2024.06.20 |
---|---|
[TypeScript] ํจ์์ ํ์ 2ํ!_! (0) | 2024.06.20 |
[TypeScript] ํ์ ๋ณ์ type alias (0) | 2024.06.20 |
[TypeScript] ๊ฐ์ฒด์ ํ์ ๊ณผ readonly (0) | 2024.06.20 |
[TypeScript] Narrowing ๊ณผ Assertion (0) | 2024.06.20 |
์์คํ ๊ณต๊ฐ ๊ฐ์ฌํฉ๋๋ค