我了解错误消息:
类型'()=>无效'不能分配给类型'()=> {}'
很好,它告诉我存在类型转换问题。但是我无法弄清楚为什么编译器认为类型不同。
该代码的背景是我有一个打字稿类,该打字稿类被赋予了一个功能,然后将其存储为成员。我希望能够使用一个空的“ noop”函数来初始化该成员,以便在使用前不必对它进行null检查。
我设法将问题减少到以下示例测试代码:
export class Test {
private _noop: () => {};
constructor(
) {
this._noop = () => { }; //I guess the compiler thinks this is returning in a new empty object using the json syntax
this._noop = this.noop; //I would have thought this shoud definitely work
this._noop = () => undefined; //This does works
}
public noop(): void {
//Nothing to see here...
}
}
Run Code Online (Sandbox Code Playgroud)
构造函数中的三个语句都旨在完成相同的工作:使用no操作函数初始化成员。但是,只有最后一条语句有效:
this._noop = () => undefined;
Run Code Online (Sandbox Code Playgroud)
其他两个语句产生编译错误。
有谁知道为什么编译器似乎无法匹配类型?
在您的定义中,private _noop: () => {}; _noop将其键入为返回对象的函数。
当您将其分配为this._noop = () => { };要分配给的_noop功能时,其类型为() => void。
如果您想_noop成为不返回任何内容的函数,则将其键入为:
private _noop: () => void;
Run Code Online (Sandbox Code Playgroud)
下面的定义意味着,_noop 是一个函数必须返回一个对象(包括 undefined 和 null)。
private _noop: () => {};
Run Code Online (Sandbox Code Playgroud)
它等于:
private _noop: () => Object;
Run Code Online (Sandbox Code Playgroud)
您可以使所有三个语句都适用于:
private _noop: () => any;
Run Code Online (Sandbox Code Playgroud)
或者第一个语句将适用于这两个:
this._noop = () => ({});
this._noop = () => { return {} };
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10870 次 |
| 最近记录: |