Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 绑定中“this”上下文中的Typescript错误&;返回函数_Javascript_Typescript_Binding_This - Fatal编程技术网

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>,
}