使用strictNullChecks有一种方法可以在没有if语句的情况下使用代码断言非null内联

时间:2017-05-05 21:46:32

标签: typescript typescript2.0

我最近启用了strictNullChecks我们的代码。我想写一个断言助手,可以内联使用我们不应该为null的地方,但是类型仍然是null作为可能的值。

类似的东西:

doSomething() {
    assertNonNull(this.obj);  // throws exception if null
    this.obj.doMore();
}

我知道我可以使用this.obj执行此操作!.doMore()但是我希望运行时断言来验证它,然后让打字稿知道过去的断言类型union不再包含null。 / p>

是否可以编写这样的辅助函数?到目前为止,我似乎无法想出任何东西。

1 个答案:

答案 0 :(得分:2)

你可以让assertNonNull返回它的参数,当它非空时适当地键入,或者抛出其他内容:

function assertNonNull<T>(x: T | null | undefined): T {
    if (x === null || x === undefined) {
        throw new Error('non-null assertion failed');
    } else {
        return x;
    }  
}

然后你可以像这样使用它:

class Foo {

    obj: { doMore() } | null;

    doSomething() {
        assertNonNull(this.obj).doMore();
    }
}