Ошибки округлости типа кажутся произвольными в Typescript

#typescript #types

#typescript #типы

Вопрос:

Это рекурсивное определение типа принимается компилятором Typescript.

 type Recursive<T> = T amp; { prop: Recursive<T> };
  

Я могу определить столько свойств, сколько захочу, и он будет скомпилирован, но если мне нужно, чтобы все возможные свойства строки были рекурсивно определены, он не будет скомпилирован.

 type Recursive<T> = T amp; { [prop: string]: Recursive<T> };
  

Почему это происходит? Возможно ли переписать второе определение, чтобы оно работало?

Комментарии:

1. В качестве обходного пути вы можете использовать type Recursive<T> = T amp; RecursiveIndex<T>; interface RecursiveIndex<T> { [prop: string]: Recursive<T>; } . Не могли бы вы добавить какой-нибудь пример, как бы вы его использовали и чего вы пытаетесь достичь?

2. Другой обходной путь: type Recursive<T> = T amp; { [prop in string]: Recursive<T> }; . Это соответствует точно вашему предполагаемому определению без ошибок, но я не знаю, почему возникает ошибка, когда вы делаете это по-своему. Мой поиск по проблемам с GitHub ничего не нашел, поэтому вы можете рассматривать подачу как ошибку. Однако это помогает создать убедительный вариант использования, поэтому вы можете поговорить об этом подробнее здесь или в GitHub, если откроете проблему. Удачи!