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

假设我将拥有一个
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代码时使用了更多的智慧,我就不会开始这个冒险.

最佳答案 在TypeScript的类型系统中无法声明这样的类型:数组必须具有同类型1

在这种情况下,阵列(阵列< c’>)具有同质的c’,其中c’= A |. B.

当然,如果数据结构可以被分解,则一些附加/复杂编码可能是“合适的”,例如.

[ A, Array<B> ]

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

点赞