六、typescript泛型使用
2023-12-29 06:13:52
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.定义泛型函数,两种使用方法:
- 使用 <>
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
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!