当前位置:   article > 正文

TypeScript的泛型和泛型约束_typescript 泛类 约束

typescript 泛类 约束

一、泛型

在使用ts封装一个函数时,由于入参是不固定的,必然参数类型也无法固定,这时就要用到泛型来定义参数类型。泛型可以理解为宽泛的类型,通常用于类和函数

例1. 类中使用泛型

  1. class Person<T>{
  2. private name: T;
  3. constructor(value: T) {
  4. this.name = value;
  5. }
  6. }
  7. const p = new Person<string>('Dalon')

例2. 函数中使用泛型

  1. function identity<T>(data: T): T {
  2. console.log(data)
  3. return data;
  4. }
  5. const id1 = identity<string>('hey boy!');
  6. const id2 = identity<number>(123456);

例3. 接口中使用泛型

  1. interface Person<T1=string, T2=number> {
  2. name: T1
  3. age: T2
  4. }
  5. const dalon:Person = {
  6. name: 'dalon',
  7. age: 18
  8. }
  9. const tom:Person<string, string> = {
  10. name: 'Tom',
  11. age: '18'
  12. }

 例3中的T1和T2泛型添加了默认类型,类似于函数的默认参数。

二、泛型约束

 泛型约束即是对泛型的类型进行约束控制,如限制为object类型或指定接口类型当在函数里使用泛型参数的属性或者方法时,就需要对泛型进行约束。

例1. 通过接口约束

  1. interface Lengthwise {
  2. length: number;
  3. }
  4. function loggingIdentity<T extends Lengthwise>(arg: T): T {
  5. console.log(arg.length); // 如果没有Lengthwise泛型约束,会报错Error: T doesn't have .length
  6. return arg;
  7. }

例2. object约束

  1. function getKeys<T extends object>(data:T) :string[] {
  2. const keys:Array<string> = Object.keys(data)
  3. return keys
  4. }

上面例2的getKeys方法获取一个对象的所有属性名, 由于Object.keys是object的原型方法,所以要求data也必须是一个object类型。

(完) 

参考文献:

泛型 · TypeScript中文网 · TypeScript——JavaScript的超集

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/901123
推荐阅读
  

闽ICP备14008679号