类型 '() => void' 不可分配给类型 '() => '
Posted
技术标签:
【中文标题】类型 \'() => void\' 不可分配给类型 \'() => \'【英文标题】:Type '() => void' is not assignable to type '() => '类型 '() => void' 不可分配给类型 '() => ' 【发布时间】:2018-01-04 05:21:24 【问题描述】:我明白错误信息:
类型 '() => void' 不可分配给类型 '() => '
好吧,它告诉我存在类型转换问题。但是我无法弄清楚为什么编译器认为类型不一样。
代码的背景是我有一个打字稿类,它被赋予了一个函数,然后将其存储为一个成员。我希望能够用一个空的“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;
其他两个语句产生编译错误。
有人知道为什么编译器似乎无法匹配类型吗?
【问题讨论】:
【参考方案1】:在您的定义中,private _noop: () => ;
_noop
被键入为返回对象的函数。
当您将其分配为this._noop = () => ;
时,您尝试分配给_noop
的函数是() => void
类型。
如果您希望 _noop
成为不返回任何内容的函数,请键入:
private _noop: () => void;
【讨论】:
【参考方案2】:下面的定义意思是,_noop是一个函数必须返回一个对象(包括undefined和null)。
private _noop: () => ;
等于:
private _noop: () => Object;
您可以使用所有三个语句:
private _noop: () => any;
或者第一个语句将同时使用这两个:
this._noop = () => ();
this._noop = () => return ;
【讨论】:
啊,太棒了……这更有意义。我没有意识到成员类型被错误地声明了。我以为我在宣布它是无效的。谢谢你解释。我的后续问题是如何声明一个返回 void 的函数类型。不过看起来@Saravana 已经做到了。以上是关于类型 '() => void' 不可分配给类型 '() => '的主要内容,如果未能解决你的问题,请参考以下文章
使用反应成帧器类型'()=> void'的打字稿错误不可分配给类型'未定义'
React 错误:类型“void”不可分配给 React.Component 中的类型“Readonly<>”
如何修复类型 'AsymmetricMatcher<any>' 不可分配给类型 '() => void'。在茉莉花/开玩笑
void' 不可分配给类型为 '(value: User[], index: number) => boolean' 的参数