Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 使用可选项固定数组长度_Typescript - Fatal编程技术网

Typescript 使用可选项固定数组长度

Typescript 使用可选项固定数组长度,typescript,Typescript,我在我的应用程序中定义了一个接口: interface someInterface { one: string; two: string; } 我的函数参数之一应始终接受由1或2个元素组成的齐次数组,如下所示: // second item should be optional [{ one: 'anyString', two: 'anyString' }, { one: 'anotherString', two: 'anotherString' }] 我希望分配给参数的这

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

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期望秒项,至少以
null
undefined
的形式出现。3不是有效的typescript代码。4接受无限量的值

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

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


在修改代码、浏览web上的不同答案以及typescript文档后,我成功地使用这种类型实现了预期的结果:

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

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

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

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

您描述的是元组类型,除了4。是否希望
[someInterface]|[someInterface,someInterface]
?作为对的支持的一部分,TypeScript 3.0发布时,3将有效。@jcalz先生,我无法停止从您那里获取有价值的信息!非常感谢您对问题的回答:)@jornsharpe在问题的最后两行添加了澄清。“更好”如何?例如,这不允许您将
SomeType
视为数组(例如,它没有
push
),但对于您的用例来说,这实际上可能不是问题。@jornsharpe补充了说明。如果该类型也允许将某个类型视为数组,那就太好了。谢谢!但我试图找到一种不那么重复的声明方式。这段信息在我最初未经编辑的回答中丢失了。
var SomeType = [someInterface] | [someInterface, someInterface];