TypeScript Array Literal Type
问题提出
考虑下面的类型定义:
1 | interface response { |
注意这里的students
是一个数组字面量,而不是普通的数组,数组中的元素是一个对象,对象中有name
和age
两个属性。我们在使用这个类型的时候,可能会遇到这样的情况:
1 | const data: response = { |
这样的情况下,data
是一个符合response
类型的对象,但是students
数组中的元素个数是不对的,因为students
的类型定义是一个元素的数组字面量。所以我们不能传入两个元素(这相当于把students当作数组类型来使用,而不是当作数组字面量来使用)。所以TS会给出如下提示:
1 | is not assignable to type [{ name: string; age: number; }] |
解决办法
这时候我们可以使用Array
类型来定义students
:
1 | interface response { |
这样的定义,students
是一个数组,数组中的元素是一个对象,对象中有name
和age
两个属性。这样的定义,students
数组中的元素个数是不确定的,可以是0个或者多个。
也可以使用[]
来定义students
:
1 | interface response { |
这样的定义和上面的是等价的。这时,我们再使用上面的data
:
1 | const data: response = { |
就不会报错了。
但是有一种特殊情况,就是类型定义有时是无法修改的,比如定义在第三方库中,这时候我们可以使用push完成同样的效果。
1 | const data: response = { |