You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
// T 是一个抽象类型,只有在调用的时候才确定它的值functionreverse<T>(items: T[]): T[]{vartoreturn=[];for(leti=items.length-1;i>=0;i--){toreturn.push(items[i]);}returntoreturn;}
// 泛型变量 T 默认参数 stringtypeA<T=string>=Array<T>;constaa: A=[1];// type 'number' is not assignable to type 'string'.constbb: A=["1"];// okconstcc: A<number>=[1];// ok
泛型
设计泛型的关键目的是在成员之间提供有意义的约束,这些成员可以是
在更加一般化的场景,我们的类型可能并不固定已知,它和any有点像,只不过我们希望在any的基础上能够有更近一步的约束。其实就是在定义的时候不指定具体类型,用一个变量替代,使用时在指定类型替换泛型变量
常见:
Array<String>
例如:
泛型类型
泛型类
与接口一样,直接把泛型类型放在类后面,可以帮助我们确认类的所有属性都在使用相同的类型。
类有两部分:静态部分和实例部分。 泛型类指的是实例部分的类型,所以类的静态属性不能使用这个泛型类型。
泛型约束
现在这个泛型函数被定义了约束,因此它不再是适用于任意类型。我们需要传入符合约束类型的值,必须包含必须的属性(length),如果不约束,arg.length 会报错
在泛型里使用类类型
综合例子
泛型是对类型进行编程
区别于平时我们对值进行编程,泛型是对类型进行编程。
例如常见类型转换:
Partial
这里其实就是接收一个类型,经过处理后返回一个新的类型。
类型推导与默认参数
泛型也支持类型推导和默认参数
什么时候用泛型
Partial
进阶
参考链接:
https://lucifer.ren/blog/2020/06/16/ts-generics/
https://jkchao.github.io/typescript-book-chinese/typings/generices.html#%E5%8A%A8%E6%9C%BA%E5%92%8C%E7%A4%BA%E4%BE%8B
The text was updated successfully, but these errors were encountered: