我有这样的类:
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;
在操场上