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 发布文章使用:只允许注册用户才可以访问!


TypeScript Generics All In one的更多相关文章

  1. TypeScript Generics

    TypeScript Generics https://www.typescriptlang.org/docs/handbook/generics.html 泛型 1 Generic Interfac ...

  2. [Typescript] Generics using TypeScript

    In this lesson we cover the key reason why programming languages need generics. We then show how use ...

  3. TypeScript Generics(泛型)

    软件工程的一个主要部分就是构建组件,构建的组件不仅需要具有明确的定义和统一的接口,同时也需要组件可复用.支持现有的数据类型和将来添加的数据类型的组件为大型软件系统的开发过程提供很好的灵活性. 在C#和 ...

  4. [TypeScript] The Basics of Generics in TypeScript

    It can be painful to write the same function repeatedly with different types. Typescript generics al ...

  5. 我要涨知识 —— TypeScript 常见面试题(一)

    1.ts 中的 any 和 unknown 有什么区别? unknown 和 any 的主要区别是 unknown 类型会更加严格:在对 unknown 类型的值执行大多数操作之前,我们必须进行某种形 ...

  6. linqjs

    Project Descriptionlinq.js - LINQ for JavaScript Features implement all .NET 4.0 methods and many ex ...

  7. Dart Generic All In One

    Dart Generic All In One Dart 泛型 https://dart.dev/guides/language/language-tour#generics /** * * @aut ...

  8. [TypeScript] Understanding Generics with RxJS

    Libraries such as RxJS use generics heavily in their definition files to describe how types flow thr ...

  9. [Typescript] Introduction to Generics in Typescript

    If Typescript is the first language in which you've encountered generics, the concept can be quite d ...

随机推荐

  1. 记录list.remove()和list.pop()

    list.remove(obj):这个是移除列表中某个值的第一个匹配项 list.pop(index):这个是移除列表中下标为index的元素 当元素全是数字或者有数字时注意区分.

  2. Error Code: 2006 - MySQL 5.7 server has gone away

    使用 Navicat 执行 sql 脚本失败 出现 Error Code: 2006 - MySQL server has gone away 原因 当MySQL客户端或mysqld服务器收到大于ma ...

  3. list里放map list 放list

    Map<String,Integer> hashMap = new HashMap<String, Integer>(); Map<String,Integer> ...

  4. Vim配置及其他注意事项

    常用的一些配置 set t_ti= set t_te= "这两个比较特殊,后边说 set termencoding=utf-8 set encoding=utf-8 set fileenco ...

  5. Webpack4.0各个击破(6)loader篇

    目录 一. loader综述 二. 如何写一个loader 三. loader的编译器本质 [参考] 一. loader综述 loader是webpack的核心概念之一,它的基本工作流是将一个文件以字 ...

  6. P6739 [BalticOI 2014 Day1] Three Friends 题解

    目录 写在前面 Solution 何为字符串哈希(可跳过): Code 写在前面 P6739 [BalticOI 2014 Day1] Three Friends 听说这题可以用比较暴力的做法过,比如 ...

  7. 应急响应-PDCERF模型 (转)

    目录 应急响应流程 防御模型 SDL 应急响应流程 很多人认为应急响应就是脸上被黑的机器去查查什么情况,是不是被中了botnet病毒.是不是被人中了rootkit等,是不是被挂了webshell等.应 ...

  8. spark SQL (四)数据源 Data Source----Parquet 文件的读取与加载

    spark SQL Parquet 文件的读取与加载 是由许多其他数据处理系统支持的柱状格式.Spark SQL支持阅读和编写自动保留原始数据模式的Parquet文件.在编写Parquet文件时,出于 ...

  9. centos 7.6安装WeADMIN ITOSS步骤

    0.升级系统并安装必要的软件 yum -y update yum -y install wget unzip nmap 1.下载JDK jdk下载地址:http://www.oracle.com/te ...

  10. java封装详解

    三大特性之---封装 封装从字面上来理解就是包装的意思,专业点就是信息隐藏,是指利用抽象数据类型将数据和基于数据的操作封装在一起,使其构成一个不可分割的独立实体,数据被保护在抽象数据类型的内部,尽可能 ...