如何简化TypeScript中是否存在属性检查?

时间:2019-04-02 08:37:07

标签: typescript

现在我进行以下检查:

 return this.profile.organization ? this.profile.organization.shifts : null;

我可以美化此属性检查存在吗?

所以,我的意思是:

this.profile.organization.shifts || '';

2 个答案:

答案 0 :(得分:2)

有一个建议添加?。 JavaScript的运算符。问题在于,当前可选的JS链接功能尚未进入第3阶段,当涉及表达式级别语法时(当涉及类型时,他们自己做事),打字稿仅支持第3阶段的JS建议。从latest GitHub问题开始,要求进行可选更改:

  

在通过向TS添加功能多次以至于在最后一秒钟将语义地毯从我们下面拉出来而被烧掉之后,严重地没有大量支持我们添加可以潜在地极大地改变运行时行为的功能的反对意见在将来的某个时刻。

在此期间,您可以使用&&

this.profile.organization && (this.profile.organization.shifts || '')

答案 1 :(得分:1)

TypeScript具有“ in”类型防护。例如,如果您有一个可以接受联合类型参数的函数,则可以检查函数调用期间给出的实际类型。

interface A { a: number };
interface B { b: string };

function foo(x: A | B) {
    if ("a" in x) { 
        return x.a;
    }
    return x.b;
}