我有一堆不同对象的类型化数组。我想编写一个函数,只要该类型具有空构造函数,就可以向数组添加一个新的空白对象,该数组将与任何数组一起使用。
我是Angular 2和Typescript的新手。数组是表单的一部分,我希望能够添加一个新的行/对象,但是我有很多数组,并且会欣赏所有数组的通用函数。
regexprep('min(Current_em)', '.*\($0)', '$0')
有 instanceOf 来确定对象是否是某个类。但是,我还没有找到一种方法来访问作为Array对象的类型。
我可以使用下面的代码但有时数组可能是空的,这不会起作用 - 但它仍然会被输入,所以理论上我们仍然可以创建它。
someObject {
constructor() { this.someField = ""; ... }
someField: string;
...
}
someOtherObject {
constructor() { this.someOtherField = ""; ... }
someOtherField: string;
...
}
Array<someObject> someArray = someObject[{...}, {...} ...];
Array<someOtherObject> someOtherArray = someOtherObject[{...}, {...} ...];
// What I would like, that would work with either above array
// new T() obviously doesn't work however
addRow<T>(array:Array<T>) : void {
array.push(new T());
}
有没有更好的方法来实现我想要的,或者我不知道的方法?谢谢。
编辑:正如Alexander所说,您可以使用
在Typescript中动态执行此操作if(array.length > 0 && array[0] instanceOf(someObject)) {
array.push(new someObject());
}
// else if instance of someOtherObject... so on so forth
在HTML 中使用时,这不起作用
例如由于HTML不了解someObject类定义,因此addRow<T>(array:Array<T>, c: {new(): T}) : void {
array.push(new c());
}
addRow(someArray, someObject);
addRow(someOtherArray, someOtherObject);
无效。
答案 0 :(得分:1)
根据https://www.typescriptlang.org/docs/handbook/generics.html(参见“在泛型中使用类类型”),您可以做的最好的是:
class someObject {
constructor() { this.someField = ""; }
someField: string;
}
class someOtherObject {
constructor() { this.someOtherField = ""; }
someOtherField: string;
}
var someArray: Array<someObject> = [];
var someOtherArray: Array<someOtherObject> = [];
function addRow<T>(array: Array<T>, c: {new(): T}) : void {
array.push(new c());
}
addRow(someArray, someObject);
addRow(someOtherArray, someOtherObject);
这是因为您必须将构造函数作为参数传递,以便能够创建它的实例。通用声明仅供编译器执行类型检查,并且在传递构造函数时不会产生实际代码。