1. function fn(a:number):number{
  2. return a;
  3. }

在定义函数或是类时,如果遇到类型不明确就可以使用泛型

function fn<T>(a:T):T{
  return a;
}

T类型,到底是什么类型,只有在函数执行的时候才能确定

好处

  • 不用any,就避免把类型检查跳过了
  • 这里也能体现出第一个参数和返回值的类型是相同的

怎么使用

可以直接调用具有泛型的函数

  • 不指定泛型,TS可以自动对类型进行判断 ```typescript function fn(a:T):T{ return a; } fn(10);

- 指定泛型
```typescript
function fn<T>(a:T):T{
  return a;
}
fn(10);
fn<string>('hello');

泛型可以指定多个

function fn2<T,K>(a:T,b:K):T{
  console.log(b);
  return a;
}
fn2(123,'hello');
fn2<number,string>(123,'hello');

限制泛型的范围

T extends Inter表示泛型T必须使Inter实现类(子类)

interface Inter{
  length:number;
}
// 泛型是inter的子类
function fn3<T extends Inter>(a:T):number{
  return a.length;
}
fn3({length:10});
class MyClass<T>{
  name:T;
  constructor(name:T){
    this.name = name;
  }
}
const mc = new MyClass<string> ('name1');