类型“() => void”不可分配给类型“() => {}”
Type '() => void' is not assignable to type '() => {}'
我理解错误信息:
Type '() => void' is not assignable to type '() => {}'
好吧,它告诉我存在类型转换问题。但是我不明白为什么编译器认为类型不一样。
代码的背景是我有一个打字稿class,它被赋予了一个函数,然后将其存储为一个成员。我希望能够用一个空的 'noop' 函数初始化成员,这样它就不必在使用前进行空检查。
我已经设法将问题减少到以下示例测试代码:
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...
}
}
构造函数中的三个语句都是为了做同一个工作:初始化一个无操作函数的成员。但是只有最后一条语句有效:
this._noop = () => undefined;
其他两个语句产生编译错误。
有谁知道为什么编译器似乎无法匹配类型?
下面的定义意味着,_noop是一个函数,必须return一个对象(包括undefined和null)。
private _noop: () => {};
等于:
private _noop: () => Object;
您可以使所有三个语句都适用于:
private _noop: () => any;
或者第一个语句适用于这两个:
this._noop = () => ({});
this._noop = () => { return {} };
在您的定义中 private _noop: () => {};
_noop
被键入为返回对象的函数。
当您将其分配为 this._noop = () => { };
时,您尝试分配给 _noop
的函数的类型为 () => void
。
如果您希望 _noop
成为不返回任何内容的函数,请将其键入:
private _noop: () => void;
我理解错误信息:
Type '() => void' is not assignable to type '() => {}'
好吧,它告诉我存在类型转换问题。但是我不明白为什么编译器认为类型不一样。
代码的背景是我有一个打字稿class,它被赋予了一个函数,然后将其存储为一个成员。我希望能够用一个空的 'noop' 函数初始化成员,这样它就不必在使用前进行空检查。
我已经设法将问题减少到以下示例测试代码:
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...
}
}
构造函数中的三个语句都是为了做同一个工作:初始化一个无操作函数的成员。但是只有最后一条语句有效:
this._noop = () => undefined;
其他两个语句产生编译错误。
有谁知道为什么编译器似乎无法匹配类型?
下面的定义意味着,_noop是一个函数,必须return一个对象(包括undefined和null)。
private _noop: () => {};
等于:
private _noop: () => Object;
您可以使所有三个语句都适用于:
private _noop: () => any;
或者第一个语句适用于这两个:
this._noop = () => ({});
this._noop = () => { return {} };
在您的定义中 private _noop: () => {};
_noop
被键入为返回对象的函数。
当您将其分配为 this._noop = () => { };
时,您尝试分配给 _noop
的函数的类型为 () => void
。
如果您希望 _noop
成为不返回任何内容的函数,请将其键入:
private _noop: () => void;