根据https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html,您应该能够在函数中使用多种类型的参数(参见union部分)
/* OK */
interface Moment {
utcOffset(): number;
utcOffset(b: number|string): Moment;
}
然而,我对以下方法的Angular报告未解析变量存在问题:
isFooBar(fooBar: Foo|Bar){
if(fooBar.isFoo){ // error here
console.log("is foo");
}
}
我有两个类定义:
export class Foo {
isFoo: boolean;
}
export class Bar {
isBar: boolean;
}
我使用不正确吗?
请参阅StackBlitz
答案 0 :(得分:2)
由于参数是联合,因此您只能访问这两种类型的公共成员。由于isFoo
不存在,因此无法访问。对于此用例,您可以使用in
类型保护来检查属性是否存在。
export class Foo {
isFoo: boolean;
}
export class Bar {
isBar: boolean;
}
function isFooBar(fooBar: Foo | Bar) {
if ('isFoo' in fooBar) {
// fooBar is of type Foo here
console.log("is foo " + fooBar.isFoo);
} else {
// fooBar is of type Bar here
console.log("is bar " + fooBar.isBar);
}
}