TypeScript(六)

118 阅读2分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第9天,点击查看活动详情

😊 大家好,我是思淼MJ。

上篇文章总结了 TypeScript 的对象类型-接口,今天继续来总结 TypeScript 的另外的类型。

数组类型

在 TypeScript 中,数组类型的声明方式有多种,比较灵活。

类型 + 方括号 表示法:

即:类型[]

举个简单的例子🌰:

let numArr:number[] = [1,2,3,4,5,6];

表示:声明一个变量 numArr 数组,并且数组的每一项都是数值类型。

需要注意的点是,数组项中不允许出现其他类型的项。

比如下面的例子:

let numArr:number[] = [1,'2',3,4,5,6];

当执行这个例子的时候,会发现报错了:

// Type 'string' is not assignable to type 'number'.

🤔问题:如果给它追加一项别的类型呢?

📖答案:不被允许。

比如对上面的例子进行调整为🌰:

let numArr:number[] = [1,2,3,4,5,6];
numArr.push('8');

执行这个例子,发现依然会报错:

// Argument of type '"8"' is not assignable to parameter of type 'number'.

因为 push 方法只允许传入的参数为 number 类型,而 '8' 是字符串类型,所以报错了。

总结一下:当定义好数组的类型时,数组中的每一项不能出现别的类型的项;数组中的一些方法的参数也会根据数组在定义时约定的类型进行限制。

数组泛型:

即:Array<项的类型>

所以上面的的例子🌰可以用这种方式表达:

let numArr:Array<number> = [1,2,3,4,5,6];

代表的含义是一样的。

关于泛型,后面会单独总结一篇文章😊,这里我们先做个简单的认识。

接口表示法:

关于接口类型上篇文章已经总结过了,如果还不熟悉可以移动此篇文章。

上面的例子,如果使用接口来表示,如下:

interface numArrType {
    [index:number]: number;
}
let numArr:numArrType = [1,2,3,4,5,6];

numArrType 表示:索引为数值类型,值为数值类型。

尽管可以通过接口来表示数组类型,但通常不会这么使用,因为这个方法比其他表示法复杂,

不过也有一种特殊的情况会经常使用它,用它来表示类数组

类数组:

类数组是指是指在写法上跟数组一样,比如arguments,函数的第一个参数是argument[0],写法上跟数组一样,但是不是数组,它的原型是Object。

所以类数组也并不是数组类型。

举个简单的例子🌰:

function sum() {
    let args: {
        [index: number]: number;
        length: number;
        callee: Function;
    } = arguments;
}

any 在数组中的应用:

一个比较常见的用法,用 any 表示数组中允许出现的任意类型。

比如下面这个例子🌰:

let list: any[] = ['abc', 25, { name: 'Tom' }];