如何使用Typescript 3.7断言函数声明“不为空”类型断言

时间:2019-12-30 20:09:10

标签: typescript assertion

当前我正在使用以下断言函数。

// declare
declare function assert(value: unknown): asserts value;

// use
assert(topPort !== null);
assert(bottomPort !== null);
assert(leftPort !== null);
assert(rightPort !== null);

我知道可以通过以下方法检查 null

declare function isNull(value: unknown): asserts value is null
let a = null;
isNull(a)

但是,如何检查value 不是 null

// this `is not` invalid syntax
declare function isNotNull(value: unknown): asserts value is not null

1 个答案:

答案 0 :(得分:1)

这在3.7新增功能的Assertion Functions部分的底部进行了说明,并使用了NonNullable实用程序类。

function assertIsDefined<T>(val: T): asserts val is NonNullable<T> {
    if (val === undefined || val === null) {
        throw new Error(
            `Expected 'val' to be defined, but received ${val}`
        );
    }
}

注意:Typescript站点上的示例使用AssertionError,但该示例在3.7.2中无法按原样工作,因此请将其更改为普通的Error