TypeScript 泛型

泛型是可以在保证类型安全的前提下,让函数等与多重类型一起工作,从而实现复用。常用于:函数、接口、class中。

泛型在定义的时候并不知道具体是什么类型,只有在调用的时候才知道是什么类型。 

如下:

   /*
        需求:定义一个getId方法,传入一个值,返回这个值
    */
    function getId<T>(val: T) {
        return val;
    }
    console.log(getId<number>(3));//在调用的时候才知道是什么意思
      console.log(getId<boolean>(true));
      console.log(getId<string>('abcdef'));
上述代码中<T>是声明泛型,而val:T是使用泛型。调用泛型的时候才指定数据类型。
同时上述调用时候getId后面的<number>是可以忽略的,因为调用的时候就会判断是什么类型了,可以简化一些。
给泛型添加接口约束。
/*
        泛型中的接口约束
    */
    interface Ilength {
        length: number
    }

    function getId<T extends Ilength>(val:T) {
        console.log(val.length);
        return val;
    }
    
    getId('hello');

此时要传入字符类型,不能传入数字类型,因为字符类型有length,但是数字类型没有。

需求:定义一个函数,参数分别为对象和属性名,根据属性名返回属性值
   function getProp<O, K extends keyof O>(obj: O, key: K) {
        return obj[key]
    }
    const p1 = {
        name:'yansunda',
        age:18
    }
    console.log(getProp(p1, 'name'));

这个keyof表示取的K来自于O的属性。这样子才不会报错。

 

 
 
 
posted @ 2024-10-01 10:09  洛飞  阅读(2)  评论(0编辑  收藏  举报