TypeScript泛型

泛型 generic,是泛指的类型。

在函数中使用泛型

/**
 * 泛型在函数中声明、使用
 */

// 可以定义多个泛型,指定多个参数的类型
const join = <T, S>(first: T, second: S) => {
  return `${first}${second}`;
};

join('1', 2);

const joinAs = <T>(first: T, second: T): T => {
  return first;
};

// Array<T> 和 T[]
const getArr = <T>(params: T[]) => {
  return params;
};

getArr(['abc', 'def']);

在类中使用泛型,使用 extends 约束泛型的类型。

interface Item {
  name: string;
}

class DataManager<T extends Item> {
  constructor(private data: T[]) {}

  getItem(index: number): string {
    return this.data[index].name;
  }
}

const data = new DataManager([{ name: 'Brady' }]);
data.getItem(0);

泛型作为具体的类型注解

const hello = <T>(params: T) => {
  return params;
};
const func: <T>(param: T) => T = hello;

使用 keyof 进行类型保护

interface Person {
  name: string;
  age: number;
  gender: string;
}

class Teacher {
  constructor(private info: Person) {}

  getInfo<T extends keyof Person>(key: T): Person[T] {
    return this.info[key];
  }
}

const teacher = new Teacher({
  name: 'Brady',
  age: 18,
  gender: 'male',
});

const result = teacher.getInfo('name');
console.log(result);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值