在使用Angular的函数参数中使用union类型时出现编译错误

时间:2018-05-30 11:07:12

标签: angular typescript

根据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

1 个答案:

答案 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);
    }
}