TypeScript:如何为具有不同元素类型但不是固定长度的JavaScript数组声明类型?

时间:2016-03-26 19:52:56

标签: typescript

假设我将在开始时拥有一个具有不同元素类型的特定模式的JavaScript数组,但最后是一个(模式)重复项目类型,到任意数量的重复。

如何声明与此JavaScript数组兼容的TypeScript类型?

interface A {
  foo: Foo,
  bar: Bar,
}

interface B {
  baz: Baz
}

interface Bat {
  // getArr(): [A, B, B, B],  // tuple type puts types at specific indexes 
                              // but only supports a fixed number of elements
  // getArr(): Array<A | B>,  // array type notation allows arbitrary number 
                              // of elements but doesn't require them to be
                              // in specific positions
}

修改

为了进一步说明,我正在尝试使用带有vanilla JavaScript代码的外部TypeScript声明来识别现有JavaScript代码中的问题。我理解这种表述可能是不明智的;如果在创建原始JavaScript代码时采用了更多的智慧,我就不会在这次冒险中着手。

1 个答案:

答案 0 :(得分:2)

在TypeScript的类型系统中无法声明:array 必须具有同类型 1

在这种情况下,数组(Array<c'>)属于同源c',其中c' = A | B

当然,如果数据结构可以被分解,那么一些额外的/复杂的编码可能适合&#34;,例如。

[ A, Array<B> ]

1 我不知道任何编程语言类型系统允许这样的限制 - 对于未绑定的序列 - 基于任意模式规则。