≪ Today I learned.
RSS購読
    公開日
    タグ
    TypeScript
    著者
    ダーシノ

    複数個のパラメータを同時に型を絞る

    TypeScriptのタイプガードは、基本1つのパラメータのみを扱うが、オブジェクトとして渡すことで複数個同時に型を絞ることができる。

    type T = A | B
    type A = { a: string }
    type B = { b: number }
    
    type U = X | Y
    type X = { x: string }
    type Y = { y: number }
    
    const t = {} as T
    const u = {} as U
    
    function isAX(obj: { t: T, u: U }): obj is { t: A, u: X } {
        return 'a' in obj.t && 'x' in obj.u
    }
    
    // オブジェクトとして渡さないと同時に複数個絞れない
    const obj = { t, u }
    if(isAX(obj)) {
        // オブジェクトリテラルでの代入はできない
        obj.t.a = obj.u.x
    }