六、typescript泛型使用

发布时间:2023年12月29日

1.identity函数,这个函数会返回任何传入它的值,可以看作是echo命令

function identity(arg:number):number
{
    return arg
}


使用any类型会导致这个函数可以接收任何类型的参数,这样会丢失一些信息,传入与返回类型应该是相同的 有特殊变量表示 类型变量:T

function  indentity(arg:any):any{
return arg
}

function identity<T>(arg:T):T{return arg}

2.定义泛型函数,两种使用方法

  1. 使用 <>
let output = identity<string>('mystring'')
明确了T类型是string

2.类型推论–即编辑器会根据传入的参数自动确定T的类型

let output = identity('mystring')

3.使用泛型变量:

function indentity<T>(arg:T):T{
    console.log(arg.length) //error 有可能传入的是number没有length
}

4.可创建数组

function indentity<T>(arg:T[]):T[]{
    console.log(arg.length)
}
//或者
function indentity<T>(arg:Array<T>):Array<T>{}

5.泛型类型:
泛型函数的类型与非泛型函数的类型没有什么不同,只是一个类型参数在最前面

function indentity<T>(arg:T):T{
    return arg
}
let myIndent:<T>(arg:T)=>T=indetity

let myindent:<U>(arg:U)=>U=indentity  //不同的泛型参数名

6.泛型接口:

interface Fn{
    <T>(arg:T):T
}
function indent<T>(arg:T):T{
    return arg
}

let myindent:Fn=indent

7.还可创建泛型类,注:无法创建泛型枚举和泛型命名空间
泛型类:指的是类的实例部分,所有类的静态属性不能使用这个泛型类

class Fn<T>{
    zeroValue:T;
    add:(s:T,y:T)=>T
}

let fn1 = new Fn<number>()
fn1.zeroValue=0
fn1.add=function(x,y){return x+y}

8.泛型约束:

interface Length{
    length:number
}

function indentity<T extends Length>(arg:T):T{
    console.log(arg.length)  //error
    //这个泛型函数已经被定义了约束,不宰适用于任意类型
}
//需要传入符合约束类型值,必须包括必须的属性
indentity({length:10,value:3})

9.在泛型约束中使用类型参数:

function obj(obj:T,key:K){
    return obj[key]
}

let x = ['a','b','c']

obj(x,'a')  //ok
obj(x,'aa')  //error a b c

10.在泛型里使用类类型:

function create<T>(c:{new() :T}):T{
    return new c()
}
文章来源:https://blog.csdn.net/weixin_43857653/article/details/135253867
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。