我声明了一个类(这只是一个简单的例子。我不使用类型别名,因为构造函数更复杂,类中有函数,...所以我需要一个类(
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name= name;
this.age= age;
}
}
要初始化实例数组,我使用以下代码:
persons: Array<Person> = [
new Person("Joe",30),
new Person("Jack",40)
]
我想知道是否有办法避免重复多次new Person
.谢谢你的回答。
如果这很常见,您可以创建一个帮助程序函数,该函数将类和构造函数的参数用于:
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
}
function newMany<T, P extends any[]>(cls: new (...p: P) => T, ...p: Array<P>): Array<T> {
return p.map(a => new cls(...a))
}
var persons: Array<Person> = newMany(Person,
["Joe", 30],
["Jack", 40]
);
游乐场链接
我会考虑使用接口,但如果你的类只有数据字段,这是通常在打字稿中完成的事情的方式:
interface Person {
name: string;
age: number;
}
var persons: Array<Person> = [
{ name: "Joe", age: 30 },
{ name: "Jack", age: 40 },
];
游乐场链接
目前还不完全清楚您要实现的目标,但是如果您要对值(Joe,Jack等(进行硬编码,则可以将它们存储在数组中并使用Array.map()
将其映射到Person
实例中,如下所示:
const personList = [
{name: 'Joe', age: 30},
{name: 'Jack', age: 40}
]
persons: Array<Person> = personList.map((person) => new Person(person.name, person.age))
希望这有帮助
您还可以通过在构造函数中添加访问修饰符来减少类定义:
class Person {
constructor(public name: string, public age: number) {}
// ^^^ this.name ^^^ this.age
}