TypeScript: определить тип массива неизвестного размера, где первый элемент имеет тип A, а остальные элементы имеют тип B - PullRequest
1 голос
/ 30 апреля 2020

У меня есть функция, которая объединяет элемент типа A с некоторым массивом элементов типа B.

Аргументы функции будут выглядеть примерно так: function merge<A, B>(elem: A, ar: B[]). Результатом может быть что-то вроде [A, B, B, B, ..., B]. Число элементов B и, следовательно, общая длина массива неизвестны.

Я знаю, что мог бы определить тип, такой как Array<A | B>, но это не дало бы полной безопасности типов, потому что любой элемент мог бы быть либо A, либо B. Я также знаю, что могу определять типы, такие как [A, B], [A, B, B] и так далее. Но, насколько я понимаю, их можно использовать только для массивов известных размеров.

Есть ли способ определения типа, подобного [A, B, B, B, ..., B] в TypeScript?

1 Ответ

0 голосов
/ 30 апреля 2020

Хорошо, нашел ответ на этот вопрос. В машинописи, начиная с версии 3, вы можете определить типы деструктурирования, такие как [A, ...[B]], которые дадут желаемый результат.

Возможно, вам также придется привести оператор возврата as [A, ...[B]], чтобы избежать ошибок типа.

...