首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >键入'Function & InputTypeComposer<any>[key]‘不满足约束'(...args: any) => any’

键入'Function & InputTypeComposer<any>[key]‘不满足约束'(...args: any) => any’
EN

Stack Overflow用户
提问于 2019-11-29 17:54:35
回答 1查看 165关注 0票数 0

我想要编写一个类型,它可以从类的键中获得键,如果键的值是函数,则类型的值需要等于函数的参数类型。这看起来可能很复杂,而且解释可能不是最好的,但代码可能会有所帮助:

代码语言:javascript
复制
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类型可以找到这里

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-30 00:49:22

无论出于什么原因,接口都不会使用可调用的签名来声明,尽管可以像调用(...args: any) => any类型一样调用Function类型的对象。如果这让你觉得奇怪的话,你可能会想要访问一个未决问题(微软/打字稿#20007)并给你的。他说的解释

Function的初衷是不能调用。换句话说,对函数类型的Function应该像其他类型的unknown一样,但不能调用。我们已经放宽了这个限制,通过特殊的大小写在编译器中给Function一个可调用的行为。我们已经讨论过如何使这成为一个--noImplicitAny错误,因为调用Function确实是不安全的。

在任何情况下,这里都有一个简单的解决方法:放弃Function中的(...args: any) => any因子

代码语言:javascript
复制
type Extensions = {
  [key in keyof InputTypeComposer]: InputTypeComposer[key] extends (...args: any) => any
  ? Parameters<InputTypeComposer[key]>
  : never;
};

这应该对你有用。希望这会有所帮助;祝你好运!

链接到代码

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59109255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档