在下面的示例中,我使用了通用函数:
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):number
或 add(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/