首页 ts常见面试题
文章
取消

ts常见面试题

ts 泛型函数

声明一个方法两个参数,第一个参数为对象,第二个参数是第一个参数中的某个key

可以使用 TypeScript 的泛型来定义一个方法,该方法接受一个对象和一个表示对象属性的键(key)。以下是一个示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 定义泛型方法
function getValueByKey<T, K extends keyof T>(obj: T, key: K): T[K] {
  return obj[key];
}

// 示例使用
interface ExampleObject {
  name: string;
  age: number;
  address: string;
}

const myObject: ExampleObject = {
  name: "John",
  age: 25,
  address: "123 Main St",
};

// 获取 "name" 属性的值
const nameValue: string = getValueByKey(myObject, "name");
console.log(nameValue); // 输出: John

// 获取 "age" 属性的值
const ageValue: number = getValueByKey(myObject, "age");
console.log(ageValue); // 输出: 25

在上面的例子中:

  • T 是泛型参数,表示传入的对象的类型。
  • K 是另一个泛型参数,表示对象属性的键类型,它必须是传入对象 T 的键之一,使用 keyof T 来实现。
  • getValueByKey 方法接受两个参数:obj 表示对象,key 表示对象属性的键。
  • 返回类型使用 T[K] 表示,这表示返回的值的类型是对象 T 中键为 K 的属性的类型。

这样,你可以通过传递不同类型的对象和相应的属性键来使用这个泛型方法。

type 与 interface 区别

声明方式不同:

  • type 可以声明基本类型、联合类型、交叉类型、它是一种灵活的声明方式
  • interface 通常用于定义对象形状,包括属性,方法和索引签名。

合并方式不同

  • type 只能保持唯一,声明相同的名字会报错
  • interface 声明多个同名时会自动合并。

拓展性

  • type 也支持拓展,通常是定义联合类型、交叉类型来实现。
  • interface 支持声明合并拓展

总结: interface 更适合面向对象编程用于定义对象形状的类型 type 更加灵活,适合交叉类型、联合类型,对类型进行别名声明

转摘分享请注明出处

JavaScript图片懒加载

css如何开启硬件加速