TS笔记-接口 -泛型

99 阅读1分钟

TS笔记-接口 -泛型

接口

(function () {

    // 描述一个对象的类型
    type myType = {
        name: string,
        age: number
    };
    
    /*
    *   接口用来定义一个类结构,用来定义一个类中应该包含哪些属性和方法
    *       同时接口也可以当成类型声明去使用
    */
    interface myInterface {
        name: string;
        age: number;
    }
    
    interface myInterface {
        gender: string;
    }
    
    // const obj: myInterface = {
    //     name: 'sss',
    //     age: 111,
    //     gender: '男'
    // };
    
    /*
    * 接口可以在定义类的时候去限制类的结构,
    *   接口中的所有的属性都不能有实际的值
    *   接口只定义对象的结构,而不考虑实际值
    *       在接口中所有的方法都是抽象方法
    */
    interface myInter {
        name: string;
    
        sayHello(): void;
    }
    
    /*
    * 定义类时,可以使类去实现一个接口,
    *   实现接口就是使类满足接口的要求
    */
    class MyClass implements myInter {
        name: string;
    
        constructor(name: string) {
            this.name = name;
        }
    
        sayHello() {
            console.log('大家好~~');
        }
    }

})();

泛型

/*

function fn(a: any): any{

  return a;

}

*/



/*

 \* 在定义函数或是类时,如果遇到类型不明确就可以使用泛型

 */

function fn<T>(a: T): T {

  return a;

}

/* I.可以直接调用具有泛型的函数 */

// 1.不指定泛型,TS可以自动对类型进行推断

let result = fn(10);

// 2.指定泛型

let result2 = fn<string>('hello');

/* II.泛型可以同时指定多个 */

function fn2<T, K>(a: T, b: K): T {

  console.log(b);

  return a;

}

fn2<number, string>(123, 'hello');

/* III.限制泛型范围 */

interface Inter {

  length: number;

}

// T extends Inter 表示泛型T必须时Inter实现类(子类)

function fn3<T extends Inter>(a: T): number {

  return a.length;

}

fn3({length: 10});

/* Ⅳ.类中使用泛型 */

class MyClass<T> {

  name: T;

  constructor(name: T) {

​    this.name = name;

  }

}

const mc = new MyClass<string>('孙悟空');

本文笔记来自-尚硅谷2021版TypeScript教程(李立超老师TS新课)