TypeScript 泛型(Generics)是一种允许在定义函数、接口或类时,不预先指定具体的类型,而是在使用时再指定类型的一种编程技巧。泛型提供了一种方式,使得代码更加灵活、可重用,并且能够提高类型安全性。
TypeScript 泛型主要有以下几种类型:
泛型在以下场景中非常有用:
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("myString");
let output2 = identity<number>(123);
interface GenericIdentityFn<T> {
(arg: T): T;
}
function identity<T>(arg: T): T {
return arg;
}
let myIdentity: GenericIdentityFn<number> = identity;
class GenericNumber<T> {
zeroValue: T;
add: (x: T, y: T) => T;
}
let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };
原因:在使用泛型时,TypeScript 编译器可能无法推断出具体的类型。
解决方法:显式指定类型参数。
let output = identity<string>("myString"); // 显式指定类型参数
原因:在使用泛型时,传入的类型与预期类型不匹配。
解决方法:检查传入的参数类型,并确保其与泛型定义的类型一致。
function add<T extends number>(x: T, y: T): T {
return x + y;
}
let result = add(1, 2); // 正确
let result2 = add("1", "2"); // 错误,类型不匹配
原因:有时需要对泛型的类型进行约束,以确保传入的类型满足某些条件。
解决方法:使用 extends
关键字对泛型进行约束。
interface Lengthwise {
length: number;
}
function loggingIdentity<T extends Lengthwise>(arg: T): T {
console.log(arg.length); // 现在我们知道arg具有length属性
return arg;
}
通过以上内容,你应该能够更好地理解 TypeScript 泛型的基础概念、优势、类型、应用场景以及常见问题的解决方法。
领取专属 10元无门槛券
手把手带您无忧上云