假设我将在开始时拥有一个具有不同元素类型的特定模式的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代码时采用了更多的智慧,我就不会在这次冒险中着手。
答案 0 :(得分:2)
在TypeScript的类型系统中无法声明:array 必须具有同类型 1
在这种情况下,数组(Array<c'>
)属于同源c'
,其中c' = A | B
。
当然,如果数据结构可以被分解,那么一些额外的/复杂的编码可能适合&#34;,例如。
[ A, Array<B> ]
1 我不知道任何编程语言类型系统允许这样的限制 - 对于未绑定的序列 - 基于任意模式规则。