首页 > 解决方案 > 在 Typescript 中键入非确定性深度数组

问题描述

我目前正在将一些Javascript代码移植到Typescript。我有一个基本上等同于以下内容的功能:

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

我想知道是否有一种简单的方法可以将类型分配deepArraydeeper. 显然,它具有string[]一定的深度,但如前所述,该深度是不确定的。我希望代码尽可能与原始代码相似,因此避免更改数据结构是目标。这是可能的,还是我应该将其标记为any并继续?

标签: javascriptarraystypescriptmultidimensional-arraytypescript-typings

解决方案


您可以定义一个表示任意嵌套数组的类型:

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)

推荐阅读