TypeScript:从扩展类型()=> any中省略函数原型

时间:2020-01-12 02:21:20

标签: javascript typescript types prototype

我正在用打字稿创建一个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。在这种情况下,它们仍然全部以智能感知显示,这不是良好的用户体验。 Don't want this

如果人们投票同意结束这个问题,您介意解释为什么可以这样做,而不是无所事事地从阴影中点击吗?

0 个答案:

没有答案
相关问题