Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 什么是Typescript中的泛型?_Generics_Typescript - Fatal编程技术网

Generics 什么是Typescript中的泛型?

Generics 什么是Typescript中的泛型?,generics,typescript,Generics,Typescript,我对typescript完全陌生,以前从未接触过c#或java。 因此,即使我阅读了typescript官方网站上的说明,我也确实不理解泛型的真正用途 下面是泛型的简单示例。下面这样做的真正好处是什么 function identity<T>(arg: T): T { return arg; } var output = identity<string>("myString"); 如有任何建议,将不胜感激。 谢谢如果没有泛型,您的var输出只能作为any键入

我对typescript完全陌生,以前从未接触过c#或java。 因此,即使我阅读了typescript官方网站上的说明,我也确实不理解
泛型的真正用途

下面是
泛型
的简单示例。下面这样做的真正好处是什么

function identity<T>(arg: T): T {
    return arg;
}

var output = identity<string>("myString");
如有任何建议,将不胜感激。
谢谢

如果没有泛型,您的
var输出
只能作为
any
键入


对于泛型,编译器知道
输出
是一个
字符串

,这是从基本示例开始的:

function identity<T>(arg: T): T {
    return arg;
}
TypeScript中的泛型 在这种情况下,使用泛型比使用any类型安全得多。 让我向您展示文件内容:

没有泛型 在下面的代码中,randomElem函数从字符串数组返回字符串。在randomColor函数中,我们将类型更改为数字,但它在编译时(或)运行时不会产生任何错误

randomElem(theArray: any): any {
    return theArray[0]; // returning a string.
}

randomColor() {
    let colors: string[] = ['violet', 'indigo', 'blue', 'green']; // String array
    let randomColor: number = this.randomElem(colors);
}

使用泛型 但是当使用泛型函数时,如果我们试图更改类型,那么在编译时就会出现错误

  randomElem<T>(theArray: T[]): T {
    return theArray[0];
  }

  randomColor() {
    let colors: string[] = ['violet', 'indigo', 'blue', 'green']; // String array
    let randomColor: number = this.randomElem(colors); // Produce Error
  }
随机元素(数组:T[]):T{ 返回数组[0]; } 随机颜色(){ 让颜色:字符串[]=['紫色'、'靛蓝'、'蓝色'、'绿色'];//字符串数组 让randomColor:number=this.randomElem(颜色);//产生错误 }


这证明在这种情况下,使用泛型比使用任何类型都要安全得多:)。

第一个签名意味着:接受某种类型的参数并返回相同类型的结果。您的第二段代码并没有声明这一点。很有趣。。那么使用它的真正好处是什么呢?您不需要显式地指定类型。编译器可以推断类型并确保它遵循泛型contraints@Ban我这里也有一些文件
randomElem(theArray: any): any {
    return theArray[0]; // returning a string.
}

randomColor() {
    let colors: string[] = ['violet', 'indigo', 'blue', 'green']; // String array
    let randomColor: number = this.randomElem(colors);
}
  randomElem<T>(theArray: T[]): T {
    return theArray[0];
  }

  randomColor() {
    let colors: string[] = ['violet', 'indigo', 'blue', 'green']; // String array
    let randomColor: number = this.randomElem(colors); // Produce Error
  }