打字稿 - 将 null 分配给变量



我有这样的类:

export class Signal {
method: (d: any) => void;
otherMethod: (d: any) => void;

public resetMethods(): void {
this.method = null;
this.otherMethod = null;
}
}

不幸的是,这将不再编译,直到以前的一些版本没有出现问题,现在在编译阶段我收到以下错误:

Type 'null' is not assignable to type '(d: any) => void'.

对于我的代码结构,重要的是将这些属性设置为"null"并在以后重新分配它们,我该如何补救编译器的抱怨?

type Nullable<T> = T | null
export class Signal {
method: Nullable<(d: any) => void> = null;
public resetMethods(): void {
this.method = null;
}
}

创建自定义类型Nullable,非常有用

操场

由于代码是现在的,无论如何您都必须将这些字段声明为可选字段,因为它们没有分配值。在这种情况下,您可以分配undefined以使 TS 满意:

export class Signal {
method?: (d: any) => void;
//    ^
otherMethod?: (d: any) => void;
//         ^

public resetMethods(): void {
this.method = undefined;
this.otherMethod = undefined;
}
}

如果您确实想要/需要分配null,那么您可以使用联合类型:

export class Signal {
method?: ((d: any) => void) | null;
otherMethod?: ((d: any) => void) | null;

public resetMethods(): void {
this.method = null;
this.otherMethod = null;
}
}

为"方法"定义一个类型:

type MyMethod = (d: any) => void;

然后用该| null声明它们:

method: MyMethod | null;

或者给自己一个方便的类型:

type NullableMyMethod = MyMethod | null;

并使用它

method: NullableMyMethod;

在操场上

相关内容

  • 没有找到相关文章

最新更新