TypeScript Union Type - ChoDragon9/posts GitHub Wiki
λμνμ μλ₯Ό λμ ν΄μ λ¬Έμλ₯Ό μ¬μ©νλ λ°©λ²μ μλ―Ένλ€. λνμ μΌλ‘ λ°©μ μμ΄ μλ€. x + 10 = 15 μΌ λ xλ 5μ΄λ€.
λμμ νμ (Algebraic Data Type)μ λκ° μ΄μμ μλ£νμ κ°μ κ°μ§λ μλ£νμ΄λ€. λμμ νμ μ μ¬μ©νλ μΈμ΄λ ν¨ν΄ 맀μΉμ ν΅ν΄ μλ£νμ μμ±μλ₯Ό μ»μ μ μλ€.
Union Type μ μ
Union Typeμ TypeScriptμμ λμμ νμ μ μ μνλ λ°©λ²μ΄λ€. Union Typeμ λκ° μ΄μμ μλ£νμ κ°μ κ°μ§λ μλ£νμ΄λ€. λκ° μ΄μμ μλ£νμ κ°μ§κΈ° λλ¬Έμ νμ μ μ μ λκ° μ΄μμ νμ λ€μ μ‘°ν©ν΄μ μ μνλ€.
λ€μμ μλ£νμ΄ μμΌλ©΄,
interface Square {
kind: 'square'
size: number
}
interface Rectangle {
kind: 'rectangle'
width: number
height: number
}
interface Circle {
kind: 'circle'
radius: number
}
Union Typeμ μ΄λ κ² μ μνλ€.
type Shape = Square | Rectangle | Circle
Union Type μ¬μ©
λμμ νμ μ λ€λ£¨λ μΈμ΄μμλ ν¨ν΄ 맀μΉμ ν΅ν΄ μλ£νμ ꡬλΆνλ€. μλ₯Ό λ€μ΄ Shapeλ₯Ό μ¬μ©ν λ, Square, Rectangle, Circle μ€ μ΄λ€ μλ£νμΈμ§ λΆκΈ° ν μ¬μ©νλ€.
νμ§λ§ TypeScriptλ μμ§ ν¨ν΄ 맀μΉμ μ§μνμ§ μκΈ° λλ¬Έμ μ§μ κ°μ νμΈν΄μ μλ£νμ ꡬλΆνλ€. μ΄ λ TypeScriptλ νμ μΆλ‘ μ ν΅ν΄ κ° μλ£νμ μΆλ‘ νκ² λλ€.
const area = (shape: Shape) => {
switch (shape.kind) {
case 'square': return shape.size * shape.size;
case 'rectangle': return shape.height * shape.width;
case 'circle': return Math.PI * shape.radius ** 2;
}
}
Union Type μ¬μ© μ
λ¨Όμ Union Typeμ μ¬μ©νμ§ μμ λ μν©μ΄λ€. Rectangle μλ£νμ μ¬μ©νλ Sketchbook ν΄λμ€κ° μλ€. clear λ©μλλ₯Ό ν΅ν΄ rectangleλ₯Ό λΉμ΄λ€.
interface Rectangle {
width: number
height: number
}
class Sketchbook {
private rectangle: Rectangle
constructor(rectangle: Rectangle) {
this.rectangle = rectangle
}
clear() {
this.rectangle = {
width: 0,
height: 0
}
}
}
rectangleμ μλ£νμ λΉμ ν λΉν κ²½μ° μ΄λ¬ν λ¨μ μ΄ μλ€.
- μλ£νμ νλ‘νΌν°κ° μΆκ° μ: clear λ©μλμ νλ‘νΌν°λ₯Ό μΆκ°
- μλ£νμ΄ λΉμμ‘μμ νμΈ: κ° νλ‘νΌν°μ κ°μ νμΈ
μ΄λ²μλ Union TypeμΌλ‘ λΉμμ‘μμ μλ―Ένλ νμ μ ν λΉν κ²½μ°μ΄λ€. λΉμμ‘μ λ null νμ μ μ¬μ©νλ€.
interface Rectangle {
width: number
height: number
}
type Empty = null
class Sketchbook {
private rectangle: Rectangle | Empty
constructor(rectangle: Rectangle) {
this.rectangle = rectangle
}
clear() {
this.rectangle = null
}
}
Union Typeμ μ¬μ©νκΈ° μ κ³Ό λΉκ΅νμ λ μ΄λ¬ν μ₯μ μ΄ μλ€.
- μλ£νμ νλ‘νΌν°κ° μΆκ° μ: nullλ‘ ν λΉ
- μλ£νμ΄ λΉμμ‘μμ νμΈ: null 체ν¬