函数类型
1
2let fst:(a:any,d: any)=>any = (a,d)=>a;
3let snd:<T,U>(a:T,d:U)=>U=(a,d)=>d;
4
基本类型
1
2
3
4let isDone: boolean = false;
5
6let decimal: number = 6;
7
8let color: string = 'red';
9let fullName: string = `Bob Bobbington`;
10let sentence: string =`hello ${fullName}你好`;
11console.log(sentence)
12
13let list: number[] = [1,2,3];
14let lis2: Array<number> = [1,2,3];
15
16let x: [number,string];
17x = [10,'he'];
18
19enum Color{
20 red,
21 green,
22 blue
23}
24
25enum Color2 {
26 red = 2,
27 green = 3,
28 blue = 6,
29}
30
31let c:Color=Color.blue;
32let c2:string = Color[2];
33
34
35let notSure: any = 4;
36notSure = "name";
37notSure = true;
38notSure = 6;
39console.log(notSure.toFixed(2));
40
41
42function getUser(): void {
43 console.log('this is void message');
44}
45
46
47let u: undefined = undefined;
48let n: null = null;
49
50
51function error():never{
52 throw new Error('this is error');
53}
54
55
56
57declare function create(o:object | null):void;
58create({props:'hhh'});
59
60//类型断言
61
62let someValue:string = 'this is string';
63let strLength: number = (<string>someValue).length;
64strLength = (someValue as string).length;
65
泛型
1
2
3function loggingIdentity<T>(arg:T[]):T[]{
4 console.log(arg.length)
5 return arg;
6}
7function identity<T>(arg:T):T {
8 return arg;
9}
10
11let myDentity:<T>(arg: T) => T = identity;
12// 也可以使用不同的名称,只要类型变量的数量以及类型变量的使用如何即可
13let myDentity2:<U>(arg: U) => U = identity;
14// 也可以是对象文字类型的调用签名
15let myDentity3:{<T>(arg:T):T} = identity;
16
17//通用类
18class GenericNumber<T> {
19 zeroValue: T | undefined;
20 add!: (x: T, y: T) => T | undefined;
21}
22
23let myGenericNumber = new GenericNumber<number>();
24myGenericNumber.zeroValue = 0;
25myGenericNumber.add = (x,y) => {
26 return x+y;
27};
28
29// 通用约束
30interface Lengthwise {
31 length: number;
32}
33
34function loggingIdentity2<T extends Lengthwise>(arg: T):T {
35 console.log(arg.length);
36 return arg;
37}
38let temp = {length:4};
39loggingIdentity2(temp);
40
41// 在通用约束中使用类型参数
42// keyof T
43function getProperty<T,K extends keyof T>(obj:T,key:K) {
44 return obj[key];
45}
46
47let x = {a:1,b:2,c:3};// keyof x = "a" | "b" | "c";
48getProperty(x,"a"); // ok
49
50interface person {
51 username:string;
52 password:string;
53}
54
55type ant = keyof person; // type ant = "username" | "password";
56
57// 在泛型中使用类类型
58
59function create<T>(c:{new ():T}):T {
60 return new c();
61}