2016-09-28 53 views
3

我有一个Tuple,我试图用它加载一个简单的数据值列表,这些列表在TypeScript中强类型化。但是,我必须使用不正确的,因为我无法获得正确的语法试图添加多组强类型元素。例如,我有如下定义:将元素加载到Typescript中的元组中

let sOptions: [number, string]; 
sOptions = [1, "Female"],[2, "Male"]; 

我也试着使Tuple一个数组,但没有工作,要么;它不建立和说,签名不匹配:

let sOptions: [number, string][]; 

是否有可能基于对[number,string]元组的定义在一个元组加载多组数据(1 ... N),或者是我错误地使用这种类型,会有更好的方法吗?

回答

1

你需要在方括号实际上包裹sOptions

let sOptions: [number, string][]; 
sOptions = [ [1, "Female"], [2, "Male"] ]; 

否则,打字稿中comma operatora,b简单演算值为第二个操作数,b。这就是为什么你得到一个签名不匹配。

+1

这就是它,我曾试过,但不是_before_我已经''Tuple'声明'阵列':S好点。 – atconway

1

[number, string]这个类型是size-2数组的类型,对于你的担心你可能会考虑一个元组。我们称这种类型为YourTuple

既然你想sOptions包含一堆,它需要有类型Array<YourTuple>(也写YourTuple[])。

然后写很多都进入sOptions数组,你需要使用正确的数组语法,另外还有[ ... ]包围它,就像这样:

let sOptions: [number, string][]; 
sOptions = [ [1, "Female"], [2, "Male"], [3, "Other"] ]; 

顺便说一句,对于定点支持TypeScript中的一个大小的数组有点坏,但越来越好,所以有时你可能仍然会遇到问题,因为它丢失了你的元组的大小为2的事实。

如果这是为了更复杂的事情,你可能想要考虑将你的元组转换成对象,其中的字段指示组件的含义:

interface NumberAndGender { 
    number: number; 
    gender: string; 
}