学习typescript-02

194 阅读3分钟

函数类型

1// (t:T)=>U functions
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//任何类型(any)
35let notSure: any = 4;
36notSure = "name";
37notSure = true;
38notSure = 6;
39console.log(notSure.toFixed(2));
40
41//空类型(void)
42function getUser(): void {
43    console.log('this is void message');
44}
45//null and undefined
46
47let u: undefined = undefined;
48let n: null = null;
49
50// never(不会发生的类型)
51function error():never{
52    throw new Error('this is error');
53}
54
55// object
56
57declare function create(o:object | null):void;
58create({props:'hhh'});
59
60//类型断言
61
62let someValue:string = 'this is string';
63let strLengthnumber = (<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}