typescript - 万一使用泛型 TypeScript 的主要原因是什么?

标签 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");

let button = document.createElement('button');
button.textContent = "Say Hello";
button.onclick = function() {
    alert(greeter.greet());
}

document.body.appendChild(button);

使用它的主要原因是什么?为什么我不能只使用 :any在此示例中键入 T ?

最佳答案

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

泛型的一些好处是:

  • 定义输入和输出参数类型之间的关系。例如,function test <T>(input: T[]): T { ... }允许您确保输入和输出使用相同的类型,尽管输入为数组。
  • 在编译时将提供更强大的类型检查。在上面的例子中,编译器让你知道数组方法可用于 input而不是任何其他方法。
  • 您可以删除一些不必要的类型转换。例如,当您有 const list: Array<Item> = [] ,遍历数组元素,您将可以访问所有 Item成员。
  • 使用泛型,您可以定义更通用的算法。例如,假设您有一个名为 Account 的基类。包含一些方法和属性。后来,其他几个类( CheckingSavingMoneyMarket )扩展了这个类。您可以拥有一个对任何扩展类执行某些操作的函数,例如 function getBalance <T extends Account>(account: T): number { ... } .
  • 关于typescript - 万一使用泛型 TypeScript 的主要原因是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49544617/

    相关文章:

    typescript - 转到定义在 VS Code 版本 1.47.2 中不起作用

    javascript - 当我在它外面单击时如何关闭 Angular 中的 `div` 框。不使用 jQuery

    javascript - VS 2015-typescript 不生成 javascript 文件

    typescript - 折叠一个有区别的联合——从联合派生出一个包含所有可能的键值组合的伞型

    angularjs - Grunt Typescript 找不到 Angular 核心

    typescript - TypeScript 可选类型与类型的区别 |不明确的

    javascript - 返回作为参数提供的函数时保留类型签名

    javascript - TypeScript 将 bool 值转换为字符串

    TypeScript 2.0 方法类型保护?

    node.js - 在 Node.js 项目中,@types/core-js 是否仍然需要 TS 类型?