Javascript 绑定中“this”上下文中的Typescript错误&;返回函数
我有一个函数Javascript 绑定中“this”上下文中的Typescript错误&;返回函数,javascript,typescript,binding,this,Javascript,Typescript,Binding,This,我有一个函数URLBuilder,它作为一个模块工作(它返回一个包含各种函数的对象,这些函数与上下文对象绑定良好,因此此绑定按预期工作,我们可以在这些函数中正确访问此) 我的问题是为什么typescript不理解URLBuilder的返回对象中函数的绑定?即使我尝试手动添加一个返回类型Typescript,在使用URLBuilder时也会抱怨说,如果没有此上下文,它就无法接受函数 如何让typescript理解返回对象中此绑定函数的this 我要解决的Typescript错误是: The 'th
URLBuilder
,它作为一个模块工作(它返回一个包含各种函数的对象,这些函数与上下文对象绑定良好,因此此
绑定按预期工作,我们可以在这些函数中正确访问此
)
我的问题是为什么typescript不理解URLBuilder的返回对象中函数的绑定?即使我尝试手动添加一个返回类型Typescript,在使用URLBuilder
时也会抱怨说,如果没有此
上下文,它就无法接受函数
如何让typescript理解返回对象中此绑定函数的this
我要解决的Typescript错误是:
The 'this' context of type 'URLBuilderAPI' is not assignable to method's 'this' of type 'ExecutionContext'.
如果您使用strictBindCallApply
编译器选项,那么代码将按预期工作,并且您将在第一次尝试()时获得完整性。如果没有strictBindCallApply
,bind
将返回any
,因此您将无法对函数()的参数进行任何检查
如果不想启用此选项,可以对bind
的结果使用类型断言来获取具有相同参数和返回类型的类型,但删除this
的类型:
....
const API = {
generateRequestURL: generateRequestURL.bind(context) as OmitThisParameter<typeof generateRequestURL>
}
...
第一个版本有什么问题?我在generateRequestURL
中看到了一些建议。您是否使用strictBindCallApply
?因为如果没有,那么bind将返回any
我没有使用strictBindCallApply
,我现在就测试它,谢谢。只是想知道是否存在其他选项……我们可以创建一个可在函数外部定义的接口类型,并将其用作函数的返回类型吗?@LouayAlosh添加了一个带有接口的版本,并使用忽略此参数而不是使用参数和返回类型
....
const API = {
generateRequestURL: generateRequestURL.bind(context) as OmitThisParameter<typeof generateRequestURL>
}
...
interface URLBuilderAPI {
generateRequestURL: OmitThisParameter<typeof generateRequestURL>,
}