在案例中使用泛型TypeScript的主要原因是什么?

在案例中使用泛型TypeScript的主要原因是什么?,typescript,typescript2.0,Typescript,Typescript2.0,有一个默认示例,说明如何在TypeScript中使用泛型类型: class Greeter<T> { greeting: T; constructor(message: T) { this.greeting = message; } greet() { return this.greeting; } } let greeter = new Greeter<string>("Hello, world"

有一个默认示例,说明如何在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);
类迎宾员{
问候:T;
构造函数(消息:T){
this.greeting=消息;
}
问候{
回复这个问候语;
}
}
让迎宾员=新迎宾员(“你好,世界”);
let button=document.createElement('button');
button.textContent=“打招呼”;
button.onclick=函数(){
警惕(greeter.greet());
}
document.body.appendChild(按钮);

使用这个的主要原因是什么?为什么我不能只使用
:本例中的任何
类型都可以改为
T

在TypeScript(和任何其他编程语言)中使用泛型的主要原因是启用类型(类、类型或接口)作为参数。它帮助我们为不同类型的输入重用相同的代码,因为类型本身可以作为参数使用

仿制药的一些好处是:

  • 定义输入和输出参数类型之间的关系。例如,
    函数测试(input:T[]):T{…}
    允许您确保输入和输出使用相同的类型,尽管输入是一个数组

  • 编译时将提供更强的类型检查。在上面的例子中,编译器让您知道数组方法可用于
    输入
    ,而不是任何其他方法

  • 您可以删除一些不必要的类型转换。例如,当您有
    const list:Array=[]
    ,查看数组元素时,您将有权访问所有
    成员

  • 使用泛型,您可以定义更通用的算法。例如,假设您有一个名为
    Account
    的基类,其中包含一些方法和属性。后来,其他几个类(
    检查
    保存
    ,和
    货币市场
    )扩展了这个类。您可以使用一个函数对任何扩展类执行某些操作,例如
    函数getBalance(account:T):number{…}


您可以在任何地方使用
:any
,但您失去了像往常一样指定类型的好处。如果我只是在警报窗口中编写消息,它会给我带来什么?我知道我可以传递数字,但区别是什么?您可以共享一个真实的示例吗?能够拥有一个数组,并且让编译器阻止您在数组中存储除人员以外的任何内容,并在IDE中完成代码后自动推断该数组中的任何元素都是人员,这不是很好吗?这是一个现实的例子,说明了为什么泛型很有用。为什么我必须在数组Person中存储另一个信息,如果它只包含关于Person的信息?这也是合乎逻辑的。