如何使用 Typescript 3.7 断言函数声明 "is not null" 类型断言

How to declare "is not null" type assertion using Typescript 3.7 Assertion Functions

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

// 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

这显示在 Assertion Functions section of the What's New in 3.7, and uses the NonNullable 实用程序 class 的底部。

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.