固定数组长度,带有可选项目

时间:2018-07-24 12:34:38

标签: typescript

我在我的应用中定义了一个接口:

interface someInterface {
    one: string;
    two: string;
}

我的一个函数参数应始终接受1或2个元素的均质数组,如下所示:

// second item should be optional
[{ one: 'anyString', two: 'anyString' }, { one: 'anotherString', two: 'anotherString' }] 

我希望分配给参数的这些类型之一可以工作:

1. [someInterface, someInterface | null]
2. [someInterface, someInterface | undefined]
3. [someInterface, someInterface?]
4. someInterface[]

但是1和2期望秒数项,至少采用nullundefined的形式。 3不是有效的打字稿代码。 4接受无限数量的值。

问题::如何定义可接受1个或2个齐次值的数组类型:在这种情况下,第一个值应始终为someInterface类型,并始终存在。第二个可选值(如果存在)也应为someInterface类型。

基本上,我正在寻找这种方法的快捷方式(即,如果数组应接受1到5个值):

[someInterface, someInterface] | [someInterface]

2 个答案:

答案 0 :(得分:1)

您可以将类型定义为“具有一个值的元组或具有两个值的元组”,这将产生一个可以像常规数组一样使用的数组:

var SomeType = [someInterface] | [someInterface, someInterface];

答案 1 :(得分:-1)

在修改代码并在网络上以及打字稿文档中经历了不同的答案之后,我设法用这种类型实现了预期的结果:

type SomeType = { 0: someInterface, 1?: someInterface }

P.S。我意识到,这允许添加第三个值,因此,如果有更可靠的解决方案,请添加您的版本