TypeScript: ユニオン関数のパラメーター型ガード
色またはシリーズでウィジェットを検索したいです(少なくとも1つは必要です)。これはコンパイルされません:
export function widgets(params: {colorId: number} | {seriesId: number}) {
if (params.colorId){
// Search widgets by color
} else {
// Search widgets by series
}
}
エラー: 型 '{ colorId: number; } | { seriesId: number; }' に 'colorId' プロパティは存在しません。
私はこれでうまくいくことができると知っています:
type ColorId = { colorId: number };
function isColorId(params: any): params is ColorId {
return typeof params.colorId === "number";
}
export function widgets(params: { colorId: number } | { seriesId: number }) {
if (isColorId(params)) {
// Search widgets by color
} else {
// Search widgets by series
}
}
私が探しているのは、よりボイラープレートの少ない解決策です。このためにもっとエレガントな方法があるように思えます。
回答 #1
この場合、型を絞り込む最も短い方法は、in 型ガードを使用することです:
export function widgets(params: {colorId: number} | {seriesId: number}) {
if ('colorId' in params) {
params.colorId
// Search widgets by color
} else {
params.seriesId
// Search widgets by series
}
}
遊び場リンク
