万一使用泛型 TypeScript 的主要原因是什么?
What is main reason to use generics TypeScript in case?
有一个如何在 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
?
在 TypeScript(和任何其他编程语言)中使用泛型的主要原因是使类型(classes、类型或接口)能够充当参数。它帮助我们为不同类型的输入重用相同的代码,因为类型本身可以作为参数使用。
泛型的一些好处是:
定义输入和输出参数类型之间的关系。例如,function test <T>(input: T[]): T { ... }
允许您确保输入和输出使用相同的类型,尽管输入为数组。
编译时将提供更强大的类型检查。在上面的示例中,编译器让您知道数组方法可用于 input
而不是任何其他方法。
您可以删除一些不必要的类型转换。例如,当您有 const list: Array<Item> = []
,遍历数组元素时,您将可以访问所有 Item
成员。
使用泛型,您可以定义更通用的算法。例如,假设您有一个名为 Account
的基 class,其中包含一些方法和属性。后来,其他几个 classes(Checking
、Saving
和 MoneyMarket
)扩展了这个 class。你可以有一个函数对任何扩展的 classes 执行一些操作,例如 function getBalance <T extends Account>(account: T): number { ... }
.
有一个如何在 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
?
在 TypeScript(和任何其他编程语言)中使用泛型的主要原因是使类型(classes、类型或接口)能够充当参数。它帮助我们为不同类型的输入重用相同的代码,因为类型本身可以作为参数使用。
泛型的一些好处是:
定义输入和输出参数类型之间的关系。例如,
function test <T>(input: T[]): T { ... }
允许您确保输入和输出使用相同的类型,尽管输入为数组。编译时将提供更强大的类型检查。在上面的示例中,编译器让您知道数组方法可用于
input
而不是任何其他方法。您可以删除一些不必要的类型转换。例如,当您有
const list: Array<Item> = []
,遍历数组元素时,您将可以访问所有Item
成员。使用泛型,您可以定义更通用的算法。例如,假设您有一个名为
Account
的基 class,其中包含一些方法和属性。后来,其他几个 classes(Checking
、Saving
和MoneyMarket
)扩展了这个 class。你可以有一个函数对任何扩展的 classes 执行一些操作,例如function getBalance <T extends Account>(account: T): number { ... }
.