TypeScript中的泛型的使用讲解
泛型是TypeScript中非常强大的一个特性,它允许你在编写函数、接口或者类的时候,不预先指定其要操作的数据类型,而是在使用的时候才指定类型。这样可以让你的代码可以用于多种不同的数据类型,从而提高代码的复用性。
泛型可以在函数、接口、类中定义。
- 函数中的泛型:
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("myString"); // output: string
let output1 = identity("myString"); //也可以不显式指定类型,TypeScript可以自动推断出类型
- 接口中的泛型:
interface GenericIdentityFn<T> {
(arg: T): T;
}
let identity: GenericIdentityFn<number> = function<T>(arg: T): T {
return arg;
}
- 类中的泛型:
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; }
泛型约束:
有时候,你可能需要为泛型中的类型参数指定一些约束,以便于在泛型中能够使用这些类型的特性。
interface Lengthwise {
length: number;
}
function loggingIdentity<T extends Lengthwise>(arg: T): T {
console.log(arg.length); // Now we know 'arg' has a '.length' property, so no error
return arg;
}
在上面的例子中,我们定义了一个泛型约束<T extends Lengthwise>
,这表示T必须满足Lengthwise接口,也就是必须有length属性。这样在loggingIdentity函数中就可以使用arg.length了,编译器就不会报错了。
泛型还有很多其他的高级用法,例如泛型接口、泛型类、泛型方法、泛型约束等等,这些都是TypeScript中泛型的重要内容。
评论已关闭