MST

星途 面试题库

面试题:TypeScript的泛型如何在提升开发效率的同时保证代码质量

请详细描述TypeScript泛型在函数、类和接口中的应用场景,说明如何通过泛型实现复用代码,并且在不同的使用场景下,如何确保代码的类型安全以提升代码质量,结合具体代码示例进行解释。
29.0万 热度难度
前端开发TypeScript

知识考点

AI 面试

面试题答案

一键面试

函数中的泛型应用场景

  1. 复用代码:当函数逻辑相同,但处理的数据类型不同时,可使用泛型。例如,一个简单的返回输入值的函数,不局限于特定类型。
function identity<T>(arg: T): T {
    return arg;
}
let result1 = identity<number>(5); 
let result2 = identity<string>("hello"); 
  1. 类型安全:TypeScript 编译器能根据传入的类型参数,确保函数内部对该参数的操作符合其类型。如上述 identity 函数,编译器知道 result1number 类型,result2string 类型,在后续使用中会进行类型检查。

类中的泛型应用场景

  1. 复用代码:比如创建一个简单的栈数据结构,它可以存储不同类型的数据。
class Stack<T> {
    private items: T[] = [];
    push(item: T) {
        this.items.push(item);
    }
    pop(): T | undefined {
        return this.items.pop();
    }
}
let numberStack = new Stack<number>();
numberStack.push(10);
let poppedNumber = numberStack.pop();
let stringStack = new Stack<string>();
stringStack.push("world");
let poppedString = stringStack.pop();
  1. 类型安全:编译器能保证在 Stack 类中,对 items 数组的操作类型正确。如 numberStack 只能操作 number 类型数据,stringStack 只能操作 string 类型数据。

接口中的泛型应用场景

  1. 复用代码:定义一个通用的响应接口,根据不同的业务场景,响应数据类型不同。
interface Response<T> {
    data: T;
    status: number;
}
let userResponse: Response<{ name: string, age: number }> = {
    data: { name: "John", age: 30 },
    status: 200
};
let productResponse: Response<{ title: string, price: number }> = {
    data: { title: "Book", price: 10 },
    status: 200
};
  1. 类型安全:确保 Response 接口实例中的 data 属性类型与定义的泛型类型一致。如 userResponsedata 必须是 { name: string, age: number } 类型,productResponsedata 必须是 { title: string, price: number } 类型。