2016-11-19 31 views
3

当我试图抓住打字稿时,这个错误会让我烦恼。任何人都可以解释两个'数组'之间的区别是什么?这是不是一个数组?如果不是,那么它是什么?类型'Array []'不能分配给类型'[Array]'

[ts] Type 'AppointmentItemData[]' is not assignable to type '[AppointmentItemData]'. 
     Property '0' is missing in type 'AppointmentItemData[]'. 

回答

1

你的第1类型(AppointmentItemData[])是AppointmentItemData元件的阵列,而第二个类型是a tuple,可能永远只包含一个单AppointmentItemData。引用自the docs

元组类型允许您表示已知固定数量元素的类型但不必相同的数组。例如,你可能想表示一个值作为一对string的和number

// Declare a tuple type 
let x: [string, number]; 
// Initialize it 
x = ["hello", 10]; // OK 
// Initialize it incorrectly 
x = [10, "hello"]; // Error 

打字稿允许你编码“该变量应该仅每有一个3元素数组中它,在那里第一个元素是一个数字,第二个元素是一个字符串,第三个元素是一个Promise,最终将解析成类似于Lizard的东西“,而如果它不是编码[number, string, Promise<Lizard>]的唯一方法是{}[](也就是说,大致上,一个Object[])。

+1

谢谢肖恩!你能以Tuple的用法为例来帮助我吗?这听起来那个元组有一个javascript对象的相似结构。 – duezz

+1

元组是具有异质值的数组 - 你可以**作为一个对象(例如'{0:1,1:'hi',2:someSalamander})查看'[1,'hi',someSalamander]但它*是一个数组。也就是'thingTypedAsTuple instanceof Array === true'。至于你如何使用它 - 在任何你想要携带一系列事物的地方,而不是一组指定事物。一些例子包括'[success,error]','[value,validations]'和'[x,y,z]'。 –

相关问题