泛型
最后更新于:2022-04-02 03:28:12
[TOC]
## 简介
一个组件可以支持多种类型的数据。 这样用户就可以以自己的数据类型来使用组件
缺点:无法最终变量类型
```
function identity(arg: any): any {
return arg;
}
```
泛型
```
function identity(arg: T): T {
return arg;
}
```
## 传入泛型的两种方式
方式一:手动声明
`let output:string= identity("myString"); `
方式二: 类型推论[常用]
`let output = identity("myString"); `
## 泛型数组
```
function loggingIdentity(arg: T[]): T[] {
console.log(arg.length); // Array has a .length, so no more error
return arg;
}
```
或
```
function loggingIdentity(arg: Array): Array {
console.log(arg.length); // Array has a .length, so no more error
return arg;
}
```
## 泛型类
```
class GenericNumber {
zeroValue: T;
add: (x: T, y: T) => T;
}
let myGenericNumber = new GenericNumber();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };
```
## 泛型约束
### 属性约束
如我们需要给某个泛型约束为必须有`length` 属性
```
interface needLneght{
length:number
}
function demo(arg:T):T{
console.log(arg.length);
return arg
}
demo("abc");//ok
demo(13);//error
```
### 在泛型约束中使用类型参数
';