TypeScript基础语法 - 泛型(四)

  • 编写一个联合类型 Demo
function join(first: string | number, second: string | number) {
  return `${first}${second}`;
}
join("baidu", ".com");

join 方法接受两个参数 firstsecond,参数有可能是字符串类型,也有可能是数字类型。方法里为了保证都可以使用,所以我们只作了字符串的基本拼接。

但是现在如果想改成 :first参数如果传的是字符串类型,要求second也传字符串类型.同理,如果是number类型,就都是number类型。需要用到- 泛型

  • 初始泛型概念-generic

泛型:[generic - 通用、泛指的意思],那最简单的理解,泛型就是泛指的类型。

泛型的定义使用<>(尖角号)进行定义的,比如现在给join方法一个泛型,名字就叫做ABC(起这个名字的意思,就是你可以随便起一个名字,但工作中要进行语义化。),后边的
参数.

function join<ABC>(first: JSPang, second: JSPang) {
  return `${first}${second}`;
}
join < string > ("baidu", ".com")
//如果是number
join < number > (1, 2);

  • 泛型中数组的使用
//第一种写法
function myFun<ANY>(params: ANY[]) {
  return params;
}
myFun < string > ["123", "456"];

//第二种写法
function myFun<ANY>(params: Array<ANY>) {
  return params;
}
myFun < string > ["123", "456"];

使用<T>来作泛型的表示

  • 多个泛型的定义(一般第一个泛型用T,第二个用P代表)
function join<T, P>(first: T, second: P) {
  return `${first}${second}`;
}
join < number, string > (1, "2");
  • 泛型的类型推断
    泛型也是支持类型推断的,比如下面的代码并没有报错,这就是类型推断。
function join<T, P>(first: T, second: P) {
  return `${first}${second}`;
}
join(1, "2");
  • 一个基本的类
class SelectGirl {
  constructor(private girls: string[]) {}
  getGirl(index: number): string {
    return this.girls[index];
  }
}

const selectGirl = new SelectGirl(["aa", "bb", "cc"]);
console.log(selectGirl.getGirl(1)); // bb
  • 初始类的泛型
class SelectGirl<T> {
  constructor(private girls: T[]) {}
  getGirl(index: number): T {
    return this.girls[index];
  }
}

const selectGirl = new SelectGirl() < string > ["aa", "bb", "cc"];

console.log(selectGirl.getGirl(1));

-泛型中的继承

interface Girl {
  name: string;
}

class SelectGirl<T extends Girl> {
  constructor(private girls: T[]) {}
  getGirl(index: number): string {
    return this.girls[index].name;
  }
}

const selectGirl = new SelectGirl([
  { name: "aa" },
  { name: "bb" },
  { name: "cc" },
]);
console.log(selectGirl.getGirl(1));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容