Ввод недетерминированного глубокого массива в Typescript - PullRequest
1 голос
/ 14 июня 2019

Я сейчас портирую некоторый код Javascript на Typescript . У меня есть функция, которая по существу эквивалентна следующему:

let deepArray = [];
function deeper() {
  if(Math.random() > 0.5) {
    deepArray.push(deeper());
  } else {
    deepArray.push("No deeper.");
  }
  return deepArray;
}
deeper();

Мне было интересно, есть ли простой способ присвоения типа deepArray и возвращаемого типа deeper. Очевидно, это string[] некоторой глубины, но, как уже упоминалось, эта глубина не определена. Я бы хотел, чтобы код был максимально похож на оригинал, поэтому цель - избежать изменения структур данных. Это возможно, или я должен отметить это как any и двигаться дальше?

1 Ответ

3 голосов
/ 14 июня 2019

Вы можете определить тип, представляющий произвольно вложенный массив:

interface NestedArray<T> extends Array<T | NestedArray<T>> {
}
let deepArray: NestedArray<string> = [];

function deeper() {
    if (Math.random() > 0.5) {
        deepArray.push(deeper());
    } else {
        deepArray.push("No deeper.");
    }
    return deepArray;
}
deeper();
console.log(deepArray)
...