![[TypeScript] Never νμ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXzGC2%2FbtsJUkBixDW%2FC9VrKFGma7H2S0loOKlDmK%2Fimg.png)
π Never νμ μ΄λ 무μμΈκ°μ?
νμ μ€ν¬λ¦½νΈμμ Never νμ μ μ λ λ°μνμ§ μλ κ°μ λνλ΄μ. μ¦, μ΄λ€ κ°λ κ°μ§ μ μλ νμ μ μλ―Έν΄μ. μ£Όλ‘ ν¨μκ° μ λ μ μμ μΌλ‘ λ°νλμ§ μκ±°λ, νμ μ€λ₯λ₯Ό λ°μμν€κ±°λ 무ν 루νλ₯Ό λλ κ²½μ° μ¬μ©λμ£ .
λΉμ λ₯Ό λ€μ΄λ³΄μλ©΄, Never νμ μ λμ΄ μλ κΈΈ κ°μμ. μ΄ κΈΈμ λ°λΌκ°λλΌλ λμ°©μ μ μκΈ° λλ¬Έμ, κ·Έ κΈΈ μμμ 무μμΈκ°λ₯Ό μ°Ύμ μ μλ μνμ£ . μ¦, ν΄λΉ μ½λκ° μ λ μ€νμ λ§μΉ μ μλ€λ κ²μ λͺ μμ μΌλ‘ λνλ λλ€.
π₯οΈ Never νμ μ μ¬μ© μμ
Never νμ μ λ€μν μν©μμ λνλ μ μμ΄μ. νΉν μμΈλ₯Ό λμ§λ ν¨μλ λλμ§ μλ ν¨μμ μμ£Ό μ¬μ©λΌμ.
1. μ€λ₯λ₯Ό λμ§λ ν¨μ
- Never νμ
μ ν¨μκ° μ μμ μΌλ‘ λλμ§ μκ³ , νμ μ€λ₯λ₯Ό λμ§ λ μ¬μ©λΌμ. μ΄ ν¨μλ κ²°μ½ κ°μ λ°ννμ§ μμΌλ―λ‘
never
λ‘ νμ μ΄ μΆλ‘ λ©λλ€.
function throwError(message: string): never {
throw new Error(message);
}
μ΄ ν¨μλ νΈμΆλλ©΄ νμ μ€λ₯λ₯Ό λμ§κ³ , μ λ λ°νλμ§ μμμ.
Never νμ μ μ΄λ° ν¨μμ λ°ν νμ μ μ μν λ μ ν©ν΄μ.
2. λλμ§ μλ ν¨μ (무ν 루ν)
- 무ν 루νλ₯Ό μ¬μ©νλ ν¨μ μμ Never νμ μΌλ‘ μΆλ‘ λΌμ. ν¨μκ° λλμ§ μκ³ κ³μν΄μ μ€νλλ―λ‘, κ²°κ³Όμ μΌλ‘ κ°μ λ°ννμ§ μμμ.
function infiniteLoop(): never {
while (true) {
console.log("무ν 루ν μ€ν μ€...");
}
}
μ΄ ν¨μλ κ³μν΄μ λ°λ³΅λ¬Έμ μ€ννλ―λ‘ μ λ μ’ λ£λμ§ μμμ.
μ΄λ° ν¨μλ never νμ μΌλ‘ μΆλ‘ λλ©°, μ λ κ°μ λ°ννμ§ μμμ.
3. μ‘°κ±΄λΆ νμ μμμ Never
- Never νμ μ μ‘°κ±΄λΆ νμ μμ λΆκ°λ₯ν μνλ₯Ό μ²λ¦¬ν λλ μ¬μ©λΌμ. μλ₯Ό λ€μ΄, νΉμ νμ μ΄ μλ κ²½μ° Never νμ μ λ°ννλλ‘ μ€μ ν μ μμ΄μ.
type ExcludeNumber<T> = T extends number ? never : T;
type Test1 = ExcludeNumber<number>; // never
type Test2 = ExcludeNumber<string>; // string
μ΄ μμ μμ, ExcludeNumberλ number νμ μ΄ μ λ¬λλ©΄ never νμ μ λ°νν΄μ.
λ°λ©΄μ string νμ μ μ λ¬νλ©΄ κ·Έλλ‘ string νμ μ΄ μ μ§λ©λλ€.
π€ Never νμ μ΄ μ μ©νκ² μ°μ΄λ μν©
Never νμ μ μ½λλ₯Ό μμ νκ² μμ±νκ³ , λΆκ°λ₯ν μν©μ λͺ μμ μΌλ‘ μ²λ¦¬νλ λ° λμμ΄ λΌμ. λ€μκ³Ό κ°μ μν©μμ μ μ©ν΄μ.
1. λͺ¨λ κ°λ₯ν μΌμ΄μ€λ₯Ό μ²λ¦¬ν΄μΌ νλ μν©
switch
λ¬Έμ΄λ μ‘°κ±΄λΆ λ‘μ§μμ λͺ¨λ κ°λ₯ν κ²½μ°λ₯Ό μ²λ¦¬ν΄μΌ ν λ, never
νμ
μ μ¬μ©ν΄ λλ½λ μΌμ΄μ€λ₯Ό κ°μ§ν μ μμ΄μ.
type Direction = "up" | "down" | "left" | "right";
function handleDirection(dir: Direction) {
switch (dir) {
case "up":
console.log("μλ‘ μ΄λν©λλ€.");
break;
case "down":
console.log("μλλ‘ μ΄λν©λλ€.");
break;
case "left":
console.log("μΌμͺ½μΌλ‘ μ΄λν©λλ€.");
break;
case "right":
console.log("μ€λ₯Έμͺ½μΌλ‘ μ΄λν©λλ€.");
break;
default:
const _exhaustiveCheck: never = dir; // μ¬κΈ°μ 'never' νμ
μ€λ₯λ₯Ό λ°μμν΄
throw new Error(`μ²λ¦¬λμ§ μμ λ°©ν₯: ${dir}`);
}
}
μ΄ μ½λμμ λͺ¨λ κ°λ₯ν λ°©ν₯μ μ²λ¦¬νλμ§ νμΈνκΈ° μν΄ never νμ μ νμ©ν΄μ.
λ§μ½ μλ‘μ΄ λ°©ν₯μ΄ μΆκ°λμλλ°λ switch λ¬Έμ λλ½λμλ€λ©΄, μ»΄νμΌ λ¨κ³μμ μ€λ₯κ° λ°μν κ±°μμ.
2. νμ μ μ’νλ μν©μμ μ¬μ©
νμ
μ μ’νλ κ³Όμ μμ λΆκ°λ₯ν νμ
μ μ²λ¦¬ν λλ never
νμ
μ΄ μ μ©ν΄μ. μλ₯Ό λ€μ΄, λͺ¨λ κ°λ₯μ±μ μ²λ¦¬ν ν λ¨λ νμ
μ΄ μμμ νμ€ν νκΈ° μν΄ μ¬μ©λΌμ.
function handleValue(value: string | number) {
if (typeof value === "string") {
console.log("λ¬Έμμ΄ κ°μ
λλ€: ", value);
} else if (typeof value === "number") {
console.log("μ«μ κ°μ
λλ€: ", value);
} else {
const _exhaustiveCheck: never = value; // μ¬κΈ°μ 'never' νμ
μ νμΈν¨
}
}
μ΄ ν¨μμμ valueλ λ¬Έμμ΄ λλ μ«μμΌ μ μμ΄μ.
λͺ¨λ κ²½μ°λ₯Ό μ²λ¦¬ν νμ, λΆκ°λ₯ν κ²½μ°κ° λ¨μ μμ λ μ»΄νμΌλ¬κ° μ€λ₯λ₯Ό λ°μμμΌμ€λλ€.
π¨ μ£Όμν μ
Never νμ μ μ λ λ°μνμ§ μλ μν©μ μ²λ¦¬νκΈ° μν κ²μ΄λ―λ‘, μ¬λ°λ₯΄κ² μ¬μ©ν΄μΌ ν΄μ. λͺ κ°μ§ μ£Όμμ¬νμ κΈ°μ΅ν΄ λμΈμ.
- Neverλ λΉ κ°κ³Όλ λ€λ₯΄λ€:
undefined
λnull
κ³Όλ λ€λ₯΄κ²,never
λ μ무 κ°λ μ‘΄μ¬νμ§ μλ νμ μ΄μμ. μ¦,never
λ λ°νλ μ μμΌλ©°, μ΄λ ν κ°λnever
νμ μΌλ‘ ν λΉν μ μμ΄μ. - μλͺ»λ Never μ¬μ©:
never
νμ μ μ μμ μΈ μ½λ νλ¦μμ μ¬μ©λμ§ μμμΌ ν΄μ. μλ₯Ό λ€μ΄,if
λ¬Έμμ λΆκ°λ₯ν 쑰건μ μ²λ¦¬ν λλnever
νμ μ μ¬μ©νμ¬ μ»΄νμΌ νμμ μ€λ₯λ₯Ό λ°μμν¬ μ μμ§λ§, μΌλ°μ μΈ μ‘°κ±΄λ¬Έμμ μ¬μ©νμ§ μλ κ²μ΄ μ’μμ. - μ¬μ©λμ§ μλ μ½λ νμΈ:
never
νμ μ μ΄μ©ν΄ μ¬μ©λμ§ μκ±°λ μλͺ»λ μ½λλ₯Ό νμΈν μ μμ΄μ. λͺ¨λ μΌμ΄μ€λ₯Ό μ²λ¦¬νμ§ μμΌλ©΄never
νμ μ μ€λ₯κ° λ°μνλ―λ‘, μ΄ νμ μ ν΅ν΄ μ½λμ μμ μ±μ λμΌ μ μμ΅λλ€.
π κ²°λ‘
Never νμ μ νμ μ€ν¬λ¦½νΈμμ μ λ λ°μνμ§ μλ μν©μ λνλ΄λ μ€μν λꡬμμ. μ΄ νμ μ μ¬μ©νλ©΄, μμΈ μ²λ¦¬, 무ν 루ν, μλͺ»λ μ½λ κ²½λ‘ μ²λ¦¬ λ±μμ μμ ν μ½λλ₯Ό μμ±ν μ μμ΄μ. νΉν μ»΄νμΌ νμμ μ€λ₯λ₯Ό κ°μ§νμ¬ μλͺ»λ λ‘μ§μ 미리 λ°©μ§νλ λ° ν° λμμ΄ λ©λλ€.
Never νμ μ μ£Όλ‘ μ€λ₯λ₯Ό λμ§λ ν¨μ, λλμ§ μλ ν¨μ λλ λΆκ°λ₯ν μν©μ λͺ μμ μΌλ‘ μ²λ¦¬νλ κ²½μ°μ μμ£Ό μ°μ΄λ©°, μ½λμ μμ μ±κ³Ό μ μ§λ³΄μμ±μ ν¬κ² ν₯μμν¬ μ μμ΄μ.
π μΆκ° μ 보
- νμ μ€ν¬λ¦½νΈμ Never νμ μ λν λ κΉμ μ΄ν΄λ₯Ό μνμ λ€λ©΄, νμ μ€ν¬λ¦½νΈ νΈλλΆμ Never νμ μΉμ μ μ°Έκ³ ν΄ λ³΄μΈμ.
'Language > TypeScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[TypeScript] μ΄κ±°ν(Enums) (2) | 2024.10.05 |
---|---|
[TypeScript] νμ κ°λ(Type Guard) (0) | 2024.04.20 |
[TypeScript] μ‘°κ±΄λΆ νμ (0) | 2024.02.19 |
[TypeScript] Interfaceμ Typeμ μ°¨μ΄ (0) | 2023.12.21 |
ν¬μ€ν μ΄ μ’μλ€λ©΄ "μ’μμβ€οΈ" λλ "ꡬλ ππ»" ν΄μ£ΌμΈμ!