有一个默认示例如何在TypeScript中使用泛型类型:
class Greeter<T> {
greeting: T;
constructor(message: T) {
this.greeting = message;
}
greet() {
return this.greeting;
}
}
let greeter = new Greeter<string>("Hello, world");
let button = document.createElement('button');
button.textContent = "Say Hello";
button.onclick = function() {
alert(greeter.greet());
}
document.body.appendChild(button);
使用此功能的主要原因是什么?为什么我不能在此示例中仅使用:any
类型T
?
答案 0 :(得分:6)
在TypeScript(和任何其他编程语言)中使用泛型的主要原因是使类型(类,类型或接口)充当参数。它帮助我们为不同类型的输入重用相同的代码,因为类型本身可用作参数。
泛型的一些好处是:
定义输入和输出参数类型之间的关系。例如,function test <T>(input: T[]): T { ... }
允许您确保输入和输出使用相同的类型,但输入为数组。
可以在编译时进行更强的类型检查。在上面的例子中,编译器让你知道数组方法可用于input
而不是任何其他方法。
您可以删除一些不必要的类型转换。例如,如果您拥有const list: Array<Item> = []
,则可以访问所有Item
成员。
使用泛型,您可以定义更通用的算法。例如,假设您有一个名为Account
的基类,其中包含一些方法和属性。之后,其他几个类(Checking
,Saving
和MoneyMarket
)扩展了此类。您可以使用一个函数对任何扩展类执行某些操作,例如function getBalance <T extends Account>(account: T): number { ... }
。