Я создаю 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 я также удаляю прототип MainFun c (примените, звоните et c.), Как и я Не хочу, чтобы он использовался, но я не могу понять, как удалить его из шрифта.
Я пробовал разные комбинации Omit, Pick et c, но пока ничего .
Редактировать:
Я добавил больше кода выше, чтобы попытаться дать больше контекста. Фактический код гораздо сложнее, но я надеюсь, что это отображает проблему.
По сути, у меня есть интерфейс publi c для функции. В реальном коде «MainFunction» изменяется в зависимости от контекста, но он всегда возвращает другую функцию с интерфейсом publi c, чтобы пользователь мог выполнить цепочку.
Я вручную удаляю прототип из главной функции, а затем назначьте ему интерфейс publi c.
Все это работает отлично и просто в JS, а типы работают нормально, если я не удаляю прототип. Я просто не могу заставить Typescript понять функцию со сделанными на заказ свойствами, и без этого я не могу предоставить точный смысл.
То, что я до сих пор управлял своей работой:
Тип, в котором есть мой PublicInterface, но он также не знает о своей функции.
Тип, который знает свою функцию и имеет мой интерфейс publi c на нем, но все реквизиты Function.prototype (apply, call et c) установлены в значение never. В этом случае они все еще отображаются в intellisense, что не очень удобно для пользователя.
Если люди проголосуют за закрытие вопроса, не могли бы вы объяснить, почему я могу что-то с этим сделать, а не просто щелкать из тени без объяснение?