既有类型检查,有有任意类型

  1. function getDatas<T>(msg:T){
  2. console.log(msg);
  3. }
  4. getDatas<string>('hello')
  5. getDatas<number>(1)

约束泛型

  1. function echoWithArr<T>(arg:T []){
  2. console.log(arg);
  3. }
  4. echoWithArr<string>(['httl'])
  5. echoWithArr<number>([1])

1.使用接口对泛型进行了扩展

  1. interface len{
  2. length:number
  3. }
  4. function getLength<T extends len>(arg:T){
  5. console.log(arg.length);
  6. }
  7. getLength<string>('dadasd')
  8. getLength({length:10})
  9. getLength<Array<number>>([1,2,3])

image.png

2.泛型类

  1. class Numlist<T>{
  2. public list:Array<T>=[];
  3. add(val:T){
  4. this.list.push(val)
  5. }
  6. }
  7. var nums=new Numlist<number>();
  8. nums.add(123)
  9. console.log(nums);
  10. var strs=new Numlist<string>();
  11. strs.add('sadadsa')
  12. console.log(strs);

image.png

3.泛型对象接口

  1. //对象类型接口
  2. interface attrs<T,U>{
  3. name:T,
  4. age:U
  5. }
  6. //在声明变量的时候指明类型
  7. var obj:attrs<string,number>={name:'lisi',age:12}