此bounty已结束,回答此问题可获得+50声望奖励,奖励宽限期20小时后结束,A. L希望引起更多关注此问题。
为什么function g
中的example
无法解释类型?它将其视为any
function f (name : string) {
return {
name : name,
}
}
function g (name : string) {
return {
...f(name),
get example () {
return this.name + " example";
}
}
}
是否有不强制输出类型的变通方法?例如get example () : string
打字游戏场
4条答案
按热度按时间9avjhtql1#
在我看来,这是TypeScript中的一个Bug。
我可以进一步简化这个例子(Playground):
hm2xizp92#
感谢@htho,我意识到我最初的答案是不正确的,问题似乎与传播运营商,通过更改为以下错误将消失:
即使您将getter的返回类型设置为string(
get example():string ...
)并在TS playground中运行console.log(g("John"))
,您也会看到this.name
将返回undefined,并且无法按预期工作。我会将你的代码重构为下面的代码,它会更易读,更容易被其他开发人员理解:
pgpifvop3#
我的猜测是,在推断类型时,Typescript对你来说是“好”的,但是因为hashMap不是按照它们声明的顺序处理的,所以我们不能确定
f(name)
将在get example()
之前执行。因此,您必须确保函数
f
在之前执行,例如这不是一个bug,因为当你在原始示例中解构函数时,如果调用
this.name
的结果将产生“undefined”。编辑:经过一些研究,似乎问题来自于无法改变对象的扩展操作符,因为Object.assign将做doc。
因此,这将工作,即使在typescript抱怨:
sczxawaw4#
你只需要定义return to example并访问f functio的正确元素。我也做了return的接口,但这是可选的。看这个例子:
在playground上运行代码