我最近启用了strictNullChecks我们的代码。我想写一个断言助手,可以内联使用我们不应该为null的地方,但是类型仍然是null作为可能的值。
类似的东西:
doSomething() {
assertNonNull(this.obj); // throws exception if null
this.obj.doMore();
}
我知道我可以使用this.obj执行此操作!.doMore()但是我希望运行时断言来验证它,然后让打字稿知道过去的断言类型union不再包含null。 / p>
是否可以编写这样的辅助函数?到目前为止,我似乎无法想出任何东西。
答案 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();
}
}