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

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

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
}