首页 > 其他分享 >typescript 泛型

typescript 泛型

时间:2022-11-10 23:11:21浏览次数:50  
标签:function typescript return 类型 arg 泛型 identity

一、泛型与 any 类型的区别

  1. 泛型是等待确定的占位类型,可以理解为函数的形参;所以泛型是固定的某一个类型,实例化的时候确定其实际类型
  2. any 类型是顶级类型,它包括了所有的基础类型,所以 any 类型是不固定的某一个类型

二、泛型函数

  1. 用法
    1 function identity<T>(arg: T): T {
    2     return arg;
    3 }
    4 let output = identity<string>("myString");
  2. 类型推断,就是说可以不传 T,它会自己推断
    let output = identity("myString"); // T 被推断为 string 类型
  3. T 类型换成 T 类型的数组
    1 function loggingIdentity<T>(arg: T[]): T[] {
    2     console.log(arg.length);
    3     return arg;
    4 }
  4. T 类型的数组用泛型定义
    1 function loggingIdentity<T>(arg: Array<T>): Array<T> {
    2     console.log(arg.length);
    3     return arg;
    4 }

三、类型约束

  1. 用法
     1 interface Lengthwise {
     2     length: number;
     3 }
     4 
     5 function loggingIdentity<T extends Lengthwise>(arg: T): T {
     6     console.log(arg.length);
     7     return arg;
     8 }
     9 
    10 loggingIdentity({length: 10, value: 3}); // ok
    11 loggingIdentity(3);  // Error, number doesn't have a .length property

四、类型约束与类型收窄的区别

  1. 类型约束是限制类型本身
  2. 类型收窄是限制类型的子类型

五、泛型接口

  1. 泛型函数接口
    1 interface GenericIdentityFn {
    2     <T>(arg: T): T;
    3 }
    4 
    5 function identity<T>(arg: T): T {
    6     return arg;
    7 }
    8 
    9 let myIdentity: GenericIdentityFn = identity;
  2. 泛型对象接口
    1 interface GenericIdentityFn<T> {
    2     (arg: T): T;
    3 }
    4 
    5 function identity<T>(arg: T): T {
    6     return arg;
    7 }
    8 
    9 let myIdentity: GenericIdentityFn<number> = identity;

六、泛型类

  1. 用法
    1 class GenericNumber<T> {
    2     zeroValue: T;
    3     add: (x: T, y: T) => T;
    4 }
    5 
    6 let myGenericNumber = new GenericNumber<number>();
    7 myGenericNumber.zeroValue = 0;
    8 myGenericNumber.add = function(x, y) { return x + y; };

七、结尾

泛型是一个非常重要的类型,这意味着,组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为我们提供了十分灵活的功能

标签:function,typescript,return,类型,arg,泛型,identity
From: https://www.cnblogs.com/aurora-power/p/16879169.html

相关文章

  • [Typescript] 93. Hard - Get Required
    Implementtheadvancedutiltype GetRequired<T>,whichremainsalltherequiredfieldsForexampletypeI=GetRequired<{foo:number,bar?:string}>//exp......
  • [Typescript] 94. Hard - Get Optional
    Implementtheadvancedutiltype GetOptional<T>,whichremainsalltheoptionalfieldsForexampletypeI=GetOptional<{foo:number,bar?:string}>//expe......
  • TypeScript(基础篇)day01
    一.TS介绍1.1简介ts是2012年由微软开发,在js的基础上添加了类型支持1.2优劣势优势:任何位置都有代码提示,增加效率;类型系统重构更容易;使用最新的ECMAscript语法劣势:和......
  • 模板和泛型编程 C++ primer笔记
    16.1定义模板重载多个相似的函数是麻烦的:比如重载能接受多个类型的compare。使用函数模板之后可以定义成这样:template<typenameT>intcompare(constT&v1,constT......
  • 记录--Uniapp + TypeScript 配置文档
    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助0目标使用uniapp +TypeScript为基础栈进行小程序开发uniapp是一个使用Vue.js开发所有前端......
  • typescript 学习笔记
    前言:学习一门新的知识,首要的问题就是概念,这里记录下一.[any,unkonw]的区别any不做类型判断,可以任意[赋值,使用]1let_a:any="1";//ok2_a=1;//ok3co......
  • simpread-TypeScript 小状况之遍历对象属性 - 掘金
    本文由简悦SimpRead转码,原文地址juejin.cn在TypeScript里面,当需要遍历对象的时候,经常就会遇到下图所示的错误提示。前言最近开始在复杂项目中使用TypeScri......
  • simpread-typescript 注释大法
    本文由简悦SimpRead转码,原文地址zhuanlan.zhihu.com函数、interface、enum、type、var的申明建议使用文档注释(持续更新中)apifunction/***获取店铺签约......
  • 泛型深入(下)
    泛型的继承泛型不具备继承性,但是数据具备继承性泛型的通配符?表示不确定的类型它可以进行类型的限定?extendE:表示可以传递E或者E的子类类型?superE:表示可以传递E或......
  • [Typescript] 92. Medium - PathParams
    typePathParams<Sextendsstring>=Sextends`/${string}/:${inferParam}/${inferREST}`?Param|PathParams<`/${REST}`>:Sextends`${string}/:${i......