複数個のパラメータを同時に型を絞る
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
}