我想要编写一个类型,它可以从类的键中获得键,如果键的值是函数,则类型的值需要等于函数的参数类型。这看起来可能很复杂,而且解释可能不是最好的,但代码可能会有所帮助:
type Extensions = {
[key in keyof InputTypeComposer]: InputTypeComposer[key] extends Function
? Parameters<InputTypeComposer[key]>
/*
Type 'Function & InputTypeComposer<any>[key]' does not satisfy
the constraint '(...args: any) => any'.ts(2344)
*/
: never;
};有什么建议吗?为什么会抛出错误?问题出在哪里?
InputTypeComposer类型可以找到这里。
发布于 2019-11-30 00:49:22
无论出于什么原因,接口都不会使用可调用的签名来声明,尽管可以像调用(...args: any) => any类型一样调用Function类型的对象。如果这让你觉得奇怪的话,你可能会想要访问一个未决问题(微软/打字稿#20007)并给你的。他说的解释
Function的初衷是不能调用。换句话说,对函数类型的Function应该像其他类型的unknown一样,但不能调用。我们已经放宽了这个限制,通过特殊的大小写在编译器中给Function一个可调用的行为。我们已经讨论过如何使这成为一个--noImplicitAny错误,因为调用Function确实是不安全的。
在任何情况下,这里都有一个简单的解决方法:放弃Function中的(...args: any) => any因子
type Extensions = {
[key in keyof InputTypeComposer]: InputTypeComposer[key] extends (...args: any) => any
? Parameters<InputTypeComposer[key]>
: never;
};这应该对你有用。希望这会有所帮助;祝你好运!
链接到代码
https://stackoverflow.com/questions/59109255
复制相似问题