在abc的下一行中的泛型部分,它在<>中。
实际上,我是从Javascript边到类型记录方的角度2。
这就是为什么我在Javascript中没有看到这些通用的部分。
export interface Animals<abc>
export class WaterAnimal <abc> implements Animals<abc> { }我得到的东西:
例:-
function identity<T>(arg: T): T {
return arg;
}我想问的是:-
<abc>前端,因为在定义该接口时,我已经将该接口作为参数传递给了.So,为什么编译器强迫我用WaterAnimalE 221类..Is来定义<abc>,这背后有任何原因。任何帮助都将不胜感激。
发布于 2017-06-07 10:55:22
泛型的一个很好的例子存在于语言本身。
大多数语言在非类型化的列表上都有表单,比如JavaScript数组:
var arr = [
1,
"str",
new Customer()
];但是一个更有用的对象是一个只包含一种类型的数组,因为这样您就可以迭代数组,知道所有事情都是一样的:
var arr: NumberArray = [
1,
3,
5
];但是我们需要为每种数组创建一个新的类型,这样我们就可以得到NumberArray、StringArray、CustomerArray.诸若此类。
因此,我们没有创建几乎无限数量的类型,而是创建了一个泛型类型。然后,我们指定我们打算使用的类型:
var arr: Array<number>= [
1,
3,
5
];类型参数(number)允许我们重用数组类或接口,而不是创建新的类型。条件是,若不指定类型约束,Array就无法知道有关此类型的任何信息。
为了了解如何在泛型类中使用这个方法,下面是一个简单的假示例:
class ArrayOfOne<T> {
private item: T;
add(item: T) {
this.item = item;
}
retrieve() : T {
return this.item;
}
}在本例中,ArrayOfOne类不需要知道T是什么,但是如果使用它,T将是强类型的。
var arr = new ArrayOfOne<string>();
arr.add("str"); // ok
arr.add(1); //not ok
var str: string = arr.retrieve(); // ok
var num: number = arr.retrieve(); // not okhttps://stackoverflow.com/questions/44408633
复制相似问题