• xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!


    TypeScript Generics All In one

    TypeScript 泛型

    1. 代码逻辑复用
    2. 扩展性
    3. 设计模式

    方法覆写, 直接覆盖
    方法重载,参数个数或参数类型不同

    test

    "use strict";
    
    /**
     *
     * @author xgqfrms
     * @license MIT
     * @copyright xgqfrms
     * @created 2020-12-07
     * @modified
     *
     * @description TypeScript 泛型
     * @augments
     * @example
     * @link
     *
     */
    
    const log = console.log;
    
    // function addGenerator<T> (type: string) {
    //   // 方法覆写, 直接覆盖
    //   // 方法重载,参数个数或参数类型不同
    //   function add<T> (arg1: T, arg2: T): T {
    //     return arg1 + arg2;
    //   }
    //   return add;
    // }
    
    function addNumber (arg1: number, arg2: number): number {
      return arg1 + arg2;
    }
    
    addNumber(1, 2);
    // addNumber(1, `2`);
    
    
    function addString (arg1: string, arg2: string): string {
      return arg1 + arg2;
    }
    
    addString(`1`, `2`);
    // addString(`1`, 2);
    
    // function addGenerics<T>(arg1: T, arg2: T): T {
    //   // error TS2365: Operator '+' cannot be applied to types 'T' and 'T'.
    //   return arg1 + arg2;
    // }
    
    function add<T> (arg1: T, arg2: T): T {
      return arg1 + arg2;
    }
    
    // 1. 泛型方法
    let addGenericsMethod: <T>(arg1: T, arg2: T) => T = add;
    // let addGenericsMethod: <T>(arg1: T, arg2: T) => T;
    // addGenericsMethod = add;
    addGenericsMethod(1, 2);
    addGenericsMethod(`1`, `2`);
    
    
    // 2. 泛型对象
    let addGenericsObject: {
      <T>(arg1: T, arg2: T): T
    } = add;
    // let addGenericsObject: {
    //   <T>(arg1: T, arg2: T): T
    // };
    // addGenericsObject = add;
    
    addGenericsObject(1, 2);
    addGenericsObject(`1`, `2`);
    
    // 3. 泛型对象接口 一
    interface addGenericsInterface {
      <T>(arg1: T, arg2: T): T,
    }
    
    let addGenerics: addGenericsInterface = add;
    // let addGenerics: addGenericsInterface;
    // addGenerics = add;
    
    addGenerics<number>(1, 2);
    addGenerics<string>(`1`, `2`);
    // 或
    // addGenerics(1, 2);
    // addGenerics(`1`, `2`);
    
    // 3. 泛型对象接口 二
    interface addGenericsInterface2<T> {
      (arg1: T, arg2: T): T,
    }
    
    let addGenericsNumber: addGenericsInterface2<number> = add;
    let addGenericsString: addGenericsInterface2<string> = add;
    
    addGenericsNumber(1, 2);
    addGenericsString(`1`, `2`);
    
    
    
    
    // 4. 泛型 class 一
    class addGenericsClass {
      // Property 'add' has no initializer and is not definitely assigned in the constructor.ts(2564)
      add: <T>(arg1: T, arg2: T) => T;
    }
    
    let addInstance = new addGenericsClass();
    addInstance.add = add;
    
    addInstance.add<number>(1, 2);
    addInstance.add<string>(`1`, `2`);
    // 或
    // addInstance.add(1, 2);
    // addInstance.add(`1`, `2`);
    
    // 4. 泛型 class 二
    class addGenericsClass2<T> {
      // Property 'add' has no initializer and is not definitely assigned in the constructor.ts(2564)
      add: (arg1: T, arg2: T) => T;
    }
    
    // A 'new' expression with type arguments must always be followed by a parenthesized argument list.ts(1384)
    // let addInstanceNumber = new addGenericsClass2<number>;
    // addInstanceNumber.add = add;
    // let addInstanceString = new addGenericsClass2<string>;
    // addInstanceString.add = add;
    
    let addInstanceNumber = new addGenericsClass2<number> ();
    addInstanceNumber.add = add;
    let addInstanceString = new addGenericsClass2<string> ();
    addInstanceString.add = add;
    
    addInstanceNumber.add(1, 2);
    addInstanceString.add(`1`, `2`);
    
    
    
    

    泛型是什么设计模式

    模板方法模式

    https://www.cnblogs.com/xgqfrms/p/14097237.html

    refs

    https://www.typescriptlang.org/docs/handbook/generics.html



    ©xgqfrms 2012-2020

    www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


  • 相关阅读:
    判断一个对象是否为空
    viewflipper的高度设置
    Android利用ViewFlipper实现屏幕切换动画效果
    锁屏状态下点亮屏幕,并弹出闹钟提示信息
    android如何取消闹铃
    luogu P1880(区间dp)
    luogu P2014 选课(树形dp)
    luogu P1122(树形dp)
    luogu P1352 (树形dp)
    luogu P1541 (dp)
  • 原文地址:https://www.cnblogs.com/xgqfrms/p/14099974.html
Copyright © 2020-2023  润新知