TypeScript 中的泛型(Generics)是一种允许你在定义类、接口或函数时使用类型参数的方式。这使得你可以编写更加通用和可重用的代码。泛型数组是指数组的元素类型是泛型类型。
在 TypeScript 中,泛型数组的类型通常表示为 Array<T>
,其中 T
是泛型类型参数。
当你需要处理多种类型的数据,并且希望代码能够适用于这些不同类型时,使用泛型数组是非常有用的。例如,你可能有一个函数,它接受一个泛型数组并返回一个具有相同元素类型的对象数组。
假设我们有一个泛型列表 T[]
,我们希望按照这个列表的顺序创建一个具有泛型对象 O<T>
的数组。以下是一个示例代码:
class O<T> {
value: T;
constructor(value: T) {
this.value = value;
}
}
function createObjectArray<T>(list: T[]): O<T>[] {
return list.map(item => new O(item));
}
// 示例使用
const numbers: number[] = [1, 2, 3];
const numberObjects: O<number>[] = createObjectArray(numbers);
console.log(numberObjects); // 输出: [ O { value: 1 }, O { value: 2 }, O { value: 3 } ]
const strings: string[] = ["a", "b", "c"];
const stringObjects: O<string>[] = createObjectArray(strings);
console.log(stringObjects); // 输出: [ O { value: 'a' }, O { value: 'b' }, O { value: 'c' } ]
原因:通常是因为在定义或使用泛型时没有正确指定类型参数。
解决方法:
例如:
function createObjectArray<T>(list: T[]): O<T>[] {
return list.map(item => new O(item));
}
const numbers: number[] = [1, 2, 3];
const numberObjects: O<number>[] = createObjectArray(numbers); // 正确
const strings: string[] = ["a", "b", "c"];
const stringObjects: O<number>[] = createObjectArray(strings); // 错误,类型不匹配
在上述示例中,stringObjects
的类型应该是 O<string>[]
而不是 O<number>[]
。
通过确保类型参数的一致性,可以避免这类类型错误。
领取专属 10元无门槛券
手把手带您无忧上云