• TS中泛型的使用


    我们在定义函数或者的定义类时,如果遇到返回值类型不明确时就可以使用泛型。

    比如在如下例子中,我们传入一个a并返回一个a,但是这个a被我们限定了只能传入number类型。

    1. function fn(a: number): number {
    2. return a;
    3. }
    4. fn(5);

    但是我们传入的参数的类型和函数返回值的类型都是不确定的,如果我们想要函数能够返回准确的数据类型,我们该怎么做呢?

    一、泛型的定义

    function 函数名<泛型名称> (参数 : 泛型名称) : 泛型名称 {  // 函数体   }

    1. function fn(a: T): T{
    2. return a;
    3. }

    二、泛型的使用

    我们可以直接调用具有泛型的函数。

    (一)不指定泛型

    TS能够自动对传入的数据类型进行推断

    比如,在如下代码中,函数传入的是10,所以定义的泛型T是number类型;函数传入的是string,所以定义的泛型T是string类型。

    1. function fn(a: T): T{
    2. return a;
    3. }
    4. console.log(fn(10)); // 打印:10
    5. console.log(fn("Hello")); // 打印:"Hello"

    (二)指定泛型

    我们在使用一个泛型函数的时候可以手动指定传入传输的类型,可以减少出差错的情况。

    函数名<数据类型> (参数)

    1. function fn(a: T): T{
    2. return a;
    3. }
    4. console.log(fn<number>(10)); // 打印:10
    5. console.log(fn<string>("Hello")); // 打印:"Hello"

     (三)指定多个泛型

    我们也可以在定义泛型函数的时候指定多个泛型:

    在如下代码中泛型T为number类型,泛型K为string类型

    1. function fn(a: T, b:K): T{
    2. return a;
    3. }
    4. console.log(fn<number, string>(10, "Hello")); // 打印:10 "Hello"

    (四)泛型结合接口使用 

    function 函数名<泛型名称 extends 接口名称> (参数 : 泛型名称) : 数据类型

    1. interface Inter{
    2. length: number;
    3. }
    4. // 泛型T必须使Inter实现类
    5. function fnextends Inter>(a: T): number{
    6. return a.length;
    7. }
    8. fn<string>("123");
    9. fn<number>(123); // 报错:类型“number”不满足约束“Inter”

    (五)泛型在类中的使用

    class 类名<泛型名称> {

            属性: 泛型名称; 

            constructor(属性: 泛型名称) { //... }

      }

    1. class Myclass {
    2. name: T;
    3. constructor(name: T) {
    4. this.name = name;
    5. }
    6. }
    7. const c = new Myclass<string>("XunLin");
  • 相关阅读:
    商城|商城小程序|基于微信小程序的智慧商城系统设计与实现(源码+数据库+文档)
    面试题—JAVA基础①
    奥运奖牌查询易语言代码
    【Unity】思考方式与构造 | 碰撞器/刚体/预设/组件
    场景图形管理 - (1)
    java 调用C#语言写的dll文件代码 超详细过程
    新版TCGA的突变SNP数据添加临床信息
    区间DP及其拓展
    SpringBoot连接Redis与Redisson【代码】
    css知识学习系列(6)-每天10个知识点
  • 原文地址:https://blog.csdn.net/XunLin233/article/details/133690026