Объявите цепочку рекурсивных методов в TypeScript

#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. спасибо за помощь, я только что понял, что неправильно объяснил свою проблему, поэтому, пожалуйста, смотрите раздел редактирование..