打字稿:为类型别名创建扩展方法

时间:2021-01-12 22:29:40

标签: typescript

我创建一个类型别名如下

export type Nullable<T> = T | null | undefined;

我想要一个扩展方法 hasValue 来检查实例是否为空或未定义。我尝试使用原型作为

Nullable.prototype.hasValue = function(): boolean => {
    return Nullable<T>(this) === null || Nullable<T>(this) === undefined
}

但是我收到以下错误。

'Nullable' 仅指一种类型,但在此处用作值。

有人可以帮忙吗?谢谢。

1 个答案:

答案 0 :(得分:1)

以下是我的评论中的建议作为答案:

您看到的编译器错误试图指出 type 定义不生成任何代码,仅用于类型检查。

要定义可在 hasValue 实例上调用的 Nullable 方法,您必须将 Nullable 定义为 class。使用此选项需要注意的是它会产生一些开销(即必须创建包装值的实例)。

一个基本的例子:

class Nullable<T> {
    value: T;
    constructor(value: T) {
        this.value = value;
    }
    hasValue() {
        return this.value != null;
    }
    /* ... */
}

或者,您可以将 hasValue 定义为一个自由函数,它接受一个 Nullable 参数。