考虑一个函数:
function handleFoo(foo: number){
// ...
}
我想要一个解析 foo 的装饰器,例如:
@fetchFromApi('/foo')
function handleFoo(foo: number){
// ...
}
where @fetchFromApi
调用我的API,然后调用handleFoo
结果 - 此时我想打电话handleFoo
没有参数,因为foo
将是fetchedFromApi
。然而,TypeScript 的类型检查器仍然希望我调用handleFoo
有一个参数。
是否可以更改装饰函数的签名?
我尝试调整装饰器的返回值,如下所示:
return function (target: Object, name: string | symbol, descriptor: any): TypedPropertyDescriptor<() => void> { ... }
但后来我得到:
Unable to resolve signature of method decorator when called as an expression.
Type 'TypedPropertyDescriptor<() => void>' is not assignable to type 'TypedPropertyDescriptor<(foo: number) => void>'.
这对我来说很奇怪,感觉它没有理由不工作——装饰器是处理和返回函数的函数,对吗?在我看来,通过正确指定装饰器的返回类型,应该能够让 TS 类型检查器相信装饰函数具有不同的签名。
不,这是不可能的。如果您看到装饰器的基本结构,它实际上采用函数(您想要将其修改为输入之一),然后添加其他步骤。所以在这种情况下你只能得到早期的签名参数。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)