javascript - TypeScript:从扩展 () => any 的类型中省略函数原型
问题描述
我正在打字稿中创建一个 API,我想返回一个函数,该函数具有更多函数作为属性(其中一个是相同的函数)。
为了实现这一点,我有:
type MainFunc = () => PublicInterface
type PublicFunction = () => PublicInterface
interface PublicInterface extends MainFunc {
mainFunc: MainFunc
anotherFunc: PublicFunction
}
const removeProto = (func: MainFunc) => {
Object.setPrototypeOf(func, null)
return func
}
const mainFunc: MainFunc = (): PublicInterface => createPublicInterface()
const anotherFunc: PublicFunction = () => createPublicInterface()
const createPublicInterface = (): PublicInterface =>
Object.assign(
removeProto(mainFunc),
{
mainFunc,
anotherFunc
}
)
在 Javascript 代码中,我还删除了 MainFunc 的原型(应用、调用等),因为我不想使用它,但是对于我的生活,我也无法弄清楚如何从类型中删除它。
我尝试了 Omit、Pick 等的各种组合,但到目前为止还没有。
编辑:
我在上面添加了更多代码以尝试提供更多上下文。实际代码要复杂得多,但我希望这能显示问题。
基本上,我有一个函数的公共接口。在实际代码中,“MainFunction”根据上下文变化,但它总是返回另一个具有公共接口的函数,以便用户可以链接。
我从主函数中手动删除原型,然后将公共接口分配给它。
仅在 JS 中,这一切都可以正常工作,而且如果我不删除原型,这些类型也可以正常工作。我只是无法让 Typescript 理解具有定制属性的函数,否则我无法提供准确的智能感知。
到目前为止,我在修补方面所做的事情:
一种类型,上面有我的 PublicInterface,但它不知道它本身也是一个函数。
一种类型,它知道它是一个函数,并且上面有我的公共接口,但所有 Function.prototype 道具(应用、调用等)都设置为从不。在这种情况下,它们仍然都以智能感知显示,这不是一个好的用户体验。
如果人们投票结束这个问题,你介意解释一下为什么这样我就可以做点什么,而不是只是从阴影中点击而不做任何解释?
解决方案
推荐阅读
- android - Jetpack Compose dev06 setContent() 不起作用?
- javascript - 嵌套异步 - 最佳实践
- javascript - 在哪里为 vue.js devtools 设置 devtools = true?
- java - 如何为 CardLayout 添加返回和下一步按钮?
- javascript - VueJS 2 v-for 表单输入单选按钮检查属性不起作用
- azure - 集成运行时(自托管)节点未注册
- node.js - 从目录中获取文件列表
- javascript - 在 discord.js 中创建使用相同命令的用户列表
- typo3 - 在嵌套的 TYPO3 Extbase 后端表单中设置关系值
- angularjs - 带有角度 4 的 pdf-viewer 的引导模式在少数情况下会失败