我理解错误消息:
输入'()=> void'不能分配给'()=>类型{}“
好吧,它告诉我有一个类型转换问题。但是我无法理解为什么编译器认为类型不一样。
代码的背景是我有一个给出函数的typescript类,然后将它存储为成员。我希望能够使用空的'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...
}
}
构造函数中的三个语句都是为了完成相同的工作:使用no操作函数初始化成员。但是只有最后一个声明有效:
this._noop = () => undefined;
其他两个语句产生编译错误。
有没有人知道为什么编译器似乎无法匹配类型?
答案 0 :(得分:4)
在您的定义中private _noop: () => {};
_noop
被输入为返回对象的函数。
当您将其指定为this._noop = () => { };
时,您尝试分配给_noop
的功能属于() => void
类型。
如果您希望_noop
函数返回任何内容,请将其键入:
private _noop: () => void;
答案 1 :(得分:2)
下面的定义意味着,_noop是一个函数必须返回一个对象(包括undefined和null)。
private _noop: () => {};
它等于:
private _noop: () => Object;
你可以使所有三个陈述都适用于:
private _noop: () => any;
或第一个语句适用于以下两个:
this._noop = () => ({});
this._noop = () => { return {} };