基础类型
// 数组
let arr1: number[] = [1, 2, 3];
let arr2: Array<number | string> = [1, 2, 'a'];
//函数
let add = (x: number, y: number) => x + y;
let compute: (x: number, y: number) => number
compute = (a, b) => a + b;
//对象
let obj: { x: number, y: number } = { x: 1, y: 1 };
obj.x = 3;
枚举
将不容易记忆的硬编码写成枚举类型
- 赋值为数字,则下面挨着没赋值的依次递增
enum R1 {
apple ='a',
banana = 3,
pineapple
}
console.log(R1.pineapple) // 4
-
反向映射
即
enum R1 {
apple = 'a',
banana = 3,
banana2 = 3,
pineapple
}
console.log(R1)
接口
TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。
鸭式辨型来自于James Whitecomb Riley的名言:"像鸭子一样走路并且嘎嘎叫的就叫鸭子。"通过制定规则来判定对象是否实现这个接口。
对象类型的接口
调用
interface Param {
name: string;
}
interface Result {
name: string;
color: string;
}
function overriddenParam(param: Param) {
return {
...param,
color: 'red'
}
}
// 调用1
let currentParam = { name: 'apple', shape: 'circle' };
overriddenParam(currentParam);
// 调用2 类型断言
overriddenParam({ name: 'apple', shape: 'circle' } as Param)
// 调用3 字符串索引签名:用任意的索引字符串可以得到任意的索引类型
interface Param {
name: string;
[x: string]: any;
}
overriddenParam({ name: 'apple', shape: 'circle' });
属性类型
interface Param {
readonly id: number;// 只读属性
name: string;
weight?: number;// 可选属性
}
- 数字索引签名
TypeScript支持两种索引签名:字符串和数字。 可以同时使用两种类型的索引,但是数字索引的返回值必须是字符串索引返回值类型的子类型。
这是因为当使用 number来索引时,JavaScript会将它转换成string然后再去索引对象。
interface Names {
[index: string]: any;
[x: number]: string;
}
函数类型的接口
let add: (x: number, y: number) => number;
interface Add {
(x: number, y: number): number
}
// 类型别名
type Add1 = (x: number, y: number) => number;
- 混合类型接口
// 实现
function getLib() {
let lib: Lib = (() => { }) as Lib;
lib.version = '1.0';
lib.doSomething = () => { };
return lib;
}
let lib1 = getLib();
lib1();
lib1.doSomething();
let lib2 = getLib();
函数
- 函数重载
function add(...rest: number[]): number;
function add(...rest: Array<string>): string;
function add(...rest: any[]): any {
let first = rest[0];
if (typeof first === 'string') {
return rest.join();
}
if (typeof first === 'number') {
return rest.reduce((pre, cur) => pre + cur);
}
}
console.log(add(1, 2, 3));// 6
console.log(add('a', 'b', 'c'));// a,b,c