string)? 由此产生的运行时错误: -6ren">
gpt4 book ai didi

typescript - 为什么具有显式 "this parameter"的函数可分配给不太具体的签名?

转载 作者:搜寻专家 更新时间:2023-10-30 20:43:14 25 4
gpt4 key购买 nike

如果函数 a 的签名要求使用显式 this 类型调用它(即 this: { x: number } ),为什么它可以分配给一个不太具体的签名(即 () => string)?

由此产生的运行时错误: Runtime Error

TypeScript 手册:this parameter .

这是新的 --strict 选项所涵盖的内容,还是对先前存在的 ~--strictFunctionTypes 选项的限制?

最佳答案

问题是,如果未指定,函数的 this 类型隐式为 any,因此您的完整定义将是:

function a(this: {x : number}) {
return "";
}

function b(fn: (this: any)=> string) { }

这两个函数是兼容的,因为 any 可以分配给任何其他类型,包括 {x : number},并且即使在 strictFunctions< 下也允许这种行为strict

确保不兼容的唯一方法是将 b 上的 this 定义为 void 作为没有 的事实的表达this 将传递给 fn:

function a(this: {x : number}) {
return "";
}
function b(fn: (this: void)=> string) { }

b(a); //error

至于为什么这不是默认行为,编译器团队对此有一个 Unresolved 问题,所以我猜他们正在调查。查看issue和一个 discussion关于主题

关于typescript - 为什么具有显式 "this parameter"的函数可分配给不太具体的签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49660100/

25 4 0