【发布时间】:2021-01-14 14:53:47
【问题描述】:
您可能知道,在严格模式下,只有 undefined 可以分配给类型 void。所以如果你尝试:
declare let _void: void;
_void = null; // error
_void = 5; // error
你会得到错误
[type] 不可分配给类型 void。
但是如果你尝试这个作为返回类型,一切都会好的:
declare let voidReturn: () => void;
declare let nullReturn: () => null;
declare let numReturn: () => number;
voidReturn = numReturn;
voidReturn = nullReturn;
void 在此处的行为类似于 any,因为它可以容纳任何类型(但它只能以一种方式工作 - 将 void 分配给任何其他返回类型都会引发错误)。
这是为什么呢?这是错误还是功能?
【问题讨论】:
-
this:github.com/Microsoft/TypeScript/wiki/… 部分回答了我的问题。
-
似乎
void的整个概念被打破了,因为你不能从函数中返回任何内容。如果您不在函数中使用return,该函数仍会返回undefined。这实际上是在语言中添加了除了null和undefined之外的第三个化身。不聪明。void不应该被使用。 -
void作为函数返回类型并不意味着该函数返回“无”。这意味着调用者不应使用函数的返回值。它是“坏”还是“不聪明”主要是见仁见智,但它是一个功能而不是一个错误。一般来说,语言维护人员会仔细考虑此类功能,并且不一致通常代表不同用例之间的权衡。
标签: typescript