上篇文章讲到TypeScript的一些基础部分(原始数据类型,任意值,类型推断,联合类型,接口),下面继续介绍一些基础部分!
一.数组的类型
怎么定义一个数组呢,下面有几种方式:
1.最简单的方法是使用「类型 + 方括号」来表示数组
let arr:number[]=[1,2,3,4,5,6];
这里限制了数组里面值的类型是number类型,否则就会报错!
这里 '1’不是number类型所以报错!
因为限制了值的类型,所以只能push number 类型!
2.用接口表示数组
interface arrType{
[index:number]:number
}
let arr:arrType=[1,2,3,4,5]
虽然接口也可以用来描述数组,但是我们一般不会这么做,因为这种方式比前两种方式复杂多了!但是如果是类数组的话,就不能用普通的方式来描述,而应该用接口(比如函数中的arguments)
function test() {
let arg:number[]=arguments
}
typeScript环境下:
大致意思是说类数组不能用number[]来描述,它缺少数组的pop方法!那么下面我们用接口来描述:
function test() {
let arg:argumentsType=arguments
}
interface argumentsType{
[index: number]: number;
length: number;
callee: Function;
}
3.any 在数组中的应用
let arr: any[] = ["1", 2, 3, {"a":1,"b":2},[1,2,3,4]]
一个比较常见的做法是,用 any 表示数组中允许出现任意类型。
4.数组泛型
let arr:Array<number>=[1,2,3,4,5,6]
我们也可以使用数组泛型(Array Generic) Array 来表示数组。
二.函数的类型
一般函数定义有两种方式:
1.函数声明
function test(x: number, y: number): number {
return x + y;
}
test(1,2);
输入多余的(或者少于要求的)参数,是不被允许的!
上面是说实参和形参不一致的错误!
2.函数表达式
let test = function (x:number,y:number) {
return x + y;
}
test(1,2)
或者
let test:(x:number,y:number)=>number = function (x:number,y:number) {
return x + y;
}
test(1,2)
在 TypeScript 的类型定义中,=> 用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型。另外我们也可以用接口定义函数的形状,看下面代码:
interface type {
(x: number, y: number): number;
};
let test: type;
test = function (x: number, y: number): number {
return x + y;
}
3.函数可选参数
可选参数必须接在必需参数后面。换句话说,可选参数后面不允许再出现必需参数了!
function test(x: number, y?: number) {
return x + y;
}
test(1);
test(1, 2);
typeScript环境下:
上面代码是正常的,再看看下面代码:
function test(x?: number, y: number) {
return x + y;
}
test(1);
test(1, 2);
typeScript环境下:
报错:一个必写参数不能跟随一个可选参数
3.函数参数默认值
TypeScript 会将添加了默认值的参数识别为可选参数
function test(x: number, y: number = 3) {
return x + y;
}
test(1);
test(1, 2);
typeScript环境下:
4.函数剩余参数
使用 …rest 的方式获取函数中的剩余参数(rest 参数)
function test(arr, ...items) {
items.forEach(function (item) {
arr.push(item);
})
}
let arr: any[] = [];
test(arr, 1, 2, 3);
console.log(arr);
typeScript环境下:
执行结果: