数组的类型
在 TypeScript中,数组类型有多种定义方式,比较灵活。
类型+[方括号]表示
let fibonacci:number[]=[1,2,3];数组的类型中不允许出现其他类型:
let fibonacci:number[]=[1,2,"3"];//不能将类型"string"分配给类型"number"。数组的一些方法的参数也会根据数组在定义时约定的类型进行限制:
let fibonacci:number[]=[1,2,3];
fibonacci.push('1') // 类型""1""的参数不能赋给类型"number"的参数。上个例子中,数组被限制了数值类型,所以对应的方法也被限制住了,不允许进行添加字符串类型的值。
数组泛类型
我们也可以使用数组泛型(Array Generic)Array<elemType>来表示数组:
let fibonacci:Array<number> = [1,1,2,3,5]用接口表示数组
接口也可以用来描述数组:
interface NumberArray {
[index:number]:number;
}
let fibonacci:NumberArray = [1,2,3,4]NumberArray表示:只要索引的类型是数字时,那么值的类型必须是数字。 虽然接口也可以用来描述数组,但是我们一般不建议这么做,因为这种方式比前两两种方式复杂多了。 不过有一种情况例外,那就是它常用来表示类数组。
类数组
类数组(Array-like Object)不是数组类型,比如arguments:
function sum(){
let args:number[]=arguments; // 类型"IArguments"缺少类型"number[]"的以下属性: pop, push, concat, join 及其他 15 项。
}上面因为arguments不是数组,所以直接使用普通的数组方式来描述报错,而应该使用接口:
function sum(){
interface args {
[index:number] : number ,
}
let args:args=arguments;
}也可以写成:
function sum(){
let args:{
[index:number]:number ,
length:number,
callee:Function
} = arguments
}常用的类数组都有自己的定义,如IArguments,NodeList,HTMLCollection等:
function sum(){
let args:IArguments = arguments;
}IArguments是 TypeScript中定义好的类型:
interface IArguments {
[index: number]: any;
length: number;
callee: Function;
}any在数组中的应用
一个比较常见的做法是,用any表示数组中允许出现任意类型:
let list:any[] = [1,2,'3',{}]