#javascript #typescript
Вопрос:
У меня есть следующая функция, которая возвращает динамический объект в vanilla JS:
function myFunc(props) { return Object.keys(props).reduce((acc, key) =gt; ({ ...acc, [key](val) { console.log(val); return this; } }), {}); }
И объект с этой функцией выше:
const myProps = { counter: 0, isCounting: false, } const obj = { myFunc: myFunc(myProps), anotherFunc: () =gt; {}, moreFunc: () =gt; {}, }
И я хочу декальцинировать этот объект в своем .d.ts
файле, но я не уверен, как лучше всего определить тип для цепочки рекурсивных методов..
Я попытался использовать следующий тип:
type Objlt;Tgt; = { myFunc: () =gt; Recordlt;keyof T, () =gt; thisgt;; anotherFunc: () =gt; void; moreFunc: () =gt; void; }
Но this
ключевое слово относится к самому экземпляру типа, а не к myFunc
объекту. Это означает, что я получаю также anotherFunc
и moreFunc
в нем, а не только динамические ключи от myProps
.
Может ли кто-нибудь помочь с этой реализацией?
Комментарии:
1.
foo(val: any) : this
чтобы показать, что это удобный интерфейс.
Ответ №1:
Вы можете определить this
в интерфейсе машинописи:
interface Obj { [key: string]: (val: string) =gt; this } const obj: Obj = { foo(val) { console.log('foo:', val); return this; }, bar(val) { console.log('bar:', val); return this; } }
Я предположил, что val
аргументы являются строковыми.
Редактировать: Я только что видел ваш комментарий к вашему посту — вы можете динамически захватить ключ с [key: string]
помощью . Я обновил свой ответ.
Комментарии:
1. спасибо за помощь, я только что понял, что неправильно объяснил свою проблему, поэтому, пожалуйста, смотрите раздел редактирование..