首页 文章

固定数组长度和可选项

提问于
浏览
1

我在我的应用程序中定义了一个界面:

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类型。

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

[someInterface, someInterface] | [someInterface]

2 回答

  • 1

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

    var SomeType = [someInterface] | [someInterface, someInterface];
    
  • -1

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

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

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

相关问题