.net - 为什么我需要 Typescript 中的泛型

标签 .net class typescript generics

在下面的示例中,我使用了通用函数:

function Identity<T>(arg: T): T[] {

    return arg;
}

我可以这样写我的方法:

  function loggingIdentity(arg) {
          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; };

我可以在不使用泛型的情况下创建类和新对象:

 class GenericNumber {
        zeroValue;
        add: (x, y);
    }
    let myGenericNumber = new GenericNumber();
    myGenericNumber.zeroValue = 0;
    myGenericNumber.add = function(x, y) { return x + y; };

在 C# 语言中,类型确定是强制性的,但在 typescript 中是可选的,我们可以在没有类型确定的情况下声明属性或变量或参数,它们可以是任何类型。

如果有人向我描述在 typescript 中使用泛型的重要性和所有好处,我会很高兴。

最佳答案

在您所有的示例中,T 可以是任何类型,但是所有T 都是同一类型。这很重要:让我们考虑一下您的 GenericNumber 类。它有一个 add 方法,该方法接受两个 T 类型的参数并返回一个 T。这可能是 add(x:number, y:number):numberadd(x:string, y:string):string - 但绝不是 add(x:string, y:Foo):boolean.

此外,typescript 编译器会知道,如果您传入两个 number,该函数也会返回一个 number。这在函数的调用点可能是有值(value)的信息。

我还建议您阅读 chapter on generics in the typescript handbook - 第一部分“Hello World of Generics”基本上回答了您的问题。

关于.net - 为什么我需要 Typescript 中的泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47742269/

相关文章:

.net - PowerShell:一种创建闭包的优雅方式

c# - 如何根据图像的高度计算图像的比例宽度?

c# - 我可以将 DynamicParameters 与模板一起使用并在 dapper 中有一个返回参数吗?

php - php 中子类构造函数如何与父类构造函数交互?

javascript - Angular 将 URL 参数发送到 Web 服务

angular - 从子组件获取父组件的 elementRef

node.js - NestJS - Nest 无法解析 ConfigurationService 的依赖关系(ConfigService,?)

c# - GetType() 在父类(super class)构造函数中返回子类 Type

c++ - 指向类中方法的函数指针数组

java - 即使我们提供了预定义的类,为什么还是会出现 Class Not Found 异常?