我正在用打字稿创建一个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属性(应用,调用等)都设置为never。在这种情况下,它们仍然全部以智能感知显示,这不是良好的用户体验。
如果人们投票同意结束这个问题,您介意解释为什么可以这样做,而不是无所事事地从阴影中点击吗?