TS — (1)泛型的定义,泛型接口,泛型类

  泛型是Ts中较为重要的一环,TypeScript 中的泛型允许你在定义函数、类或接口时,不指定具体类型,而在使用时再动态地传入类型参数,使得代码更加灵活和可重用性更高。

  1.基本语法

在 TypeScript 中,泛型通常用尖括号(<>)括起来表示类型参数,可以包括一个或多个类型参数。例如:

function identity<T>(arg: T): T {
  return arg
}

这里 <T> 表示类型参数,可以传入任何类型,返回值类型与传入的参数类型相同。

在使用泛型时,我们可以指定具体的类型参数,也可以让编译器根据上下文自动推断类型。例如:

let result1 = identity<string>("hello");  // result1 类型为 string
let result2 = identity(42);               // result2 类型为 number

除了在函数中使用泛型,我们也可以在类、接口等代码结构中使用泛型。

2.泛型接口

泛型接口的定义方式和普通接口基本相同,只是在定义时需要在接口名后面加上尖括号,尖括号内为泛型类型参数。例如:

interface MyArray<T> {
  push(item: T): void;
  pop(): T | undefined;
  length: number;
}

上面的代码定义了一个泛型接口 MyArray<T>,其中的方法 push 接受一个泛型类型参数 T 的参数,并且返回值为 void;方法 pop 没有参数,返回一个 T 类型的值或者 undefined;属性 length 返回一个 number 类型的值。

通过这种方式,我们可以定义出具有通用性的接口,以适应多种不同的数据类型。在实际使用时,我们需要指定泛型类型参数的具体类型。例如:

const myArr: MyArray<string> = {
  push(item: string) {
    // ...
  },
  pop() {
    // ...
  },
  length: 0
};

上面的代码定义了一个 MyArray<string> 类型的变量 myArr,其中泛型类型参数 T 被指定为 string。这个变量可以被用来操作一个字符串类型的数组,因为它符合了 MyArray 接口的定义。

3.泛型类

泛型类是一种在类定义时使用类型变量的方式,可以在类的属性、方法和构造函数中使用这个类型变量。与泛型函数类似,泛型类的类型变量可以在使用时指定具体的类型,从而实现类的复用和通用性。

泛型类的语法和普通类的语法类似,只是在类名后面使用尖括号定义泛型参数,例如:

class MyClass<T> {
  private value: T;
  
  constructor(value: T) {
    this.value = value;
  }
  
  getValue(): T {
    return this.value;
  }
}

这个例子定义了一个名为 MyClass 的泛型类,它有一个类型参数 T。在类的构造函数和方法中都可以使用这个类型参数,例如在构造函数中将传入的参数值赋值给类的私有属性 value,以及在 getValue 方法中返回这个属性值。

使用泛型类时需要在类名后面使用尖括号传入具体的类型,例如:

const myInstance = new MyClass<string>("Hello World");
console.log(myInstance.getValue()); // 输出 "Hello World"

在这个示例中,我们创建了一个 MyClass 的实例 myInstance,并将类型参数指定为 string。在实例中调用 getValue 方法时,返回的是构造函数中传入的 "Hello World" 字符串值。

除了使用单一的类型参数外,泛型类还可以使用多个类型参数,例如:

class Pair<A, B> {
  constructor(public first: A, public second: B) {}
  
  swap(): Pair<B, A> {
    return new Pair(this.second, this.first);
  }
}

这个例子定义了一个名为 Pair 的泛型类,它有两个类型参数 A 和 B,表示这个类包含了两个值的对,第一个值的类型是 A,第二个值的类型是 B。在构造函数中使用这两个类型参数分别定义了类的两个公有属性 first 和 second。

Pair 类还实现了一个 swap 方法,这个方法会交换 Pair 实例中两个值的顺序,并返回一个新的 Pair 实例,其中第一个值的类型变为了 B,第二个值的类型变为了 A。这个方法的返回类型中使用了泛型参数,表示返回的实例的类型与调用 swap 方法的实例的类型相同,只是两个类型参数的顺序交换了。

使用 Pair 类时可以传入任意两个类型作为类型参数,例如:

const myPair = new Pair<string, number>("hello", 42);
console.log(myPair.first); // 输出 "hello"
console.log(myPair.second); // 输出 42

const swappedPair = myPair.swap();
console.log(swappedPair.first); // 输出 42
console.log(swappedPair.second); // 输出 "hello"

上面的示例定义了一个泛型类Pair<T, U>,这个类有两个类型参数T和U,代表这个类可以接受任意两个类型作为其类型参数。这个类有两个属性firstsecond,分别是类型为T和类型为U的值。类中的构造函数需要传入两个参数,一个是类型为T的值,一个是类型为U的值,然后将这两个值分别赋给firstsecond属性。此外,这个类还有一个方法swap,可以将firstsecond属性的值互换。使用时需要指定T和U的具体类型,例如const p = new Pair<string, number>("foo", 123),表示实例化一个Pair类,其类型参数T为string类型,U为number类型,然后将"foo"赋给first属性,将123赋给second属性。

要在银河麒麟桌面操作系统V10 SP1上安装字体,你可以按照以下步骤进行操作: 1. 首先,将字体文件放置在适当的目录中。根据引用\[1\],你可以将字体文件放置在以下目录之一:/usr/share/fonts、~/.fonts/或~/.local/share/fonts。第一个目录是系统所有用户共享的,需要管理员权限进行安装。后两个目录是当前登录用户所有的,不需要管理员权限。你可以从网页下载所需的字体包,通常为ttf格式,或者从Windows系统的字体文件保存目录中获取字体文件。 2. 如果你下载的字体文件是RPM格式的,而银河麒麟桌面V10 SP1需要deb格式的安装包,你需要将RPM转换为deb包。根据引用\[2\],你可以使用以下命令进行转换:sudo alien XXX.rpm。如果你的系统没有安装alien包,你需要在线安装。 3. 打开存放字体包的文件夹,在文件夹中右键点击并选择"在终端打开"。 4. 如果你想将字体安装到/usr/share/fonts目录下,可以使用以下命令:sudo cp *.ttf /usr/share/fonts,然后使用sudo fc-cache -fv命令刷新系统字体缓存。 5. 如果你想将字体安装到~/.fonts/目录下(或者安装到~/.local/share/fonts的原理相同),可以使用以下命令:mkdir -p ~/.fonts,然后使用cp *.ttf ~/.fonts命令将字体文件复制到该目录,最后使用fc-cache -vf命令刷新系统字体缓存。 通过按照以上步骤进行操作,你就可以在银河麒麟桌面操作系统V10 SP1上成功安装字体了。 #### 引用[.reference_title] - *1* *3* [银河麒麟桌面操作系统V10 SP1 如何安装字体](https://blog.csdn.net/weixin_40579171/article/details/123852594)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [银河麒麟桌面操作系统V10SP1(X86)安装SQL Developer](https://blog.csdn.net/weixin_54752007/article/details/125361801)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值