TypeScript:`void`与optional / default参数不兼容

时间:2017-05-02 00:39:40

标签: typescript

虽然undefinednullvoid兼容,但我认为反之亦然,这显然会侵蚀可选参数的效用,这似乎很奇怪:

function getThing(): string | void {}
function checkThing(val: string = 'abcd') {}
checkThing(getThing())

t.ts(3,12): error TS2345: Argument of type 'string | void' is not assignable to parameter of type 'string'.
  Type 'void' is not assignable to type 'string'.

指定一个没有默认值的可选arg并不会更改错误,但是指定一个带void的联合(并生成默认初始化参数的那个)。坚持在所有可选参数上声明void并集似乎相当繁重,可能在任何时间点都是void函数结果的目标。您还可以使用void参数做什么?

1 个答案:

答案 0 :(得分:0)

您的代码示例:

function getThing(): string | void {}
function checkThing(val: string = 'abcd') {}
checkThing(getThing())

t.ts(3,12): error TS2345: Argument of type 'string | void' is not assignable to parameter of type 'string'.
  Type 'void' is not assignable to type 'string'.

专注于错误Type 'void' is not assignable to type 'string'checkThing需要string,并且会给出您所说的void。因此错误。

  

坚持在所有可选参数上声明void联合似乎相当繁重,可能在任何时间点都是void函数结果的目标。你还会用void参数做什么?

这是由TypeScript团队设计的。您有权获得不同的意见,我可以同情您的愿望