一、对象类型
1. 使用接口定义对象类型:接口类似java中的接口,可用于对类的一部分进行抽象以及对对象形状的描述。
对象定义的变量应与接口数量相同。不可多不可少。
interface Animal {
land: boolean;
sound: string;
}
let dog: Animal = {
land: true,
sound: 'bark'
};
2. 特殊属性:
1)可选属性:一个对象不需要匹配接口完全形状的时候使用,在属性后面加?
interface Animal { land: boolean; sound?: string; }let dog: Animal = { land: true}; 2)任意属性:不确定要加的属性是什么。[propName: string]: any;interface Animal { land: boolean; sound?: string; [propName: string]: any; }
3)只读属性:只在声明时赋值,不可再次赋值readonly id: number;
二、数组类型:
1. 数组类型确定后,数组项中不可出现其他类型的数据
let fibonacci: number[] = [1, 1, 2, 3, 5];
2. 数组泛型:Array<elemType>,泛型,顾名思义多种类型,这里指预定什么类型,使用时在进行指定。先将任意类型定为T,然后调用时将string付给T,则是string类型function createArray<T>(length: number, value: T): Array<T> { let result = []; for (let i = 0; i < length; i++) { result[i] = value; } return result; } createArray<string>(3, 'x');
3. 用接口表示:
4. 任意类型数组:interface NumberArray { [index: number]: number; } let fibonacci: NumberArray = [1, 1, 2, 3, 5];
5. 类数组:不是数组类型,常常有自己的接口定义。let list: any[] = ['Xcat Liu', 25, { website: 'http://xcatliu.com' }];
三、函数类型:同javascript,函数通过函数声明及函数表达式定义,要考虑输入及输出
1. 函数声明:同样参数个数不可多不可少
1)x: number, y: number声明输入function sum(x: number, y: number): number { return x + y; }
2)sum(...): number声明输出
2. 函数表达式
1)一般声明方式:只对输入进行了限制,输出通过推断限定
2)箭头函数方式:可以手动设定输出类型,箭头左边设定输入类型,右边设定输出类型let mySum = function (x: number, y: number): number { return x + y; };
let mySum: (x: number, y: number) => number = function (x: number, y: number): number { return x + y; };
3. 使用接口定义
interface SearchFunc { (source: string, subString: string): boolean; } let mySearch: SearchFunc; mySearch = function(source: string, subString: string) { return source.search(subString) !== -1; }
4. 可选参数:同前面相同,在参数后面加上?
5. 参数默认值,在函数参数中直接设定:name: string='bob'
6. 剩余参数:...rest获取剩余参数,参数个数不限,是一个数组,后面不可以有其它参数。
function push(array: any[], ...items: any[]) { items.forEach(function(item) { array.push(item); }); } let a = []; push(a, 1, 2, 3);
7. 重载:类似java的重载,相同名称函数可以接受不同个数,不同类型的变量。