我在Angular app中使用InMemoryDbService
。 model
的某些领域是自定义类型。
以下字段是类的数组:
public FlightQuotes: CFlightClassQuote[];
以下是此字段的初始化:
const cf = new Array<CFlightClassQuote>();
cf[0] = new CFlightClassQuote();
cf[0].Class = 'A';
cf[0].ClassName = 'B';
cf[0].FreeBack = 2;
cf[0].FreeDirect = 5;
cf[1] = new CFlightClassQuote();
cf[1].Class = 'C';
cf[1].ClassName = 'D';
cf[1].FreeBack = 3;
cf[1].FreeDirect = 6;
......
......
const model = new MyModel();
model.FlightQuotes = cf;
在问这个问题之前我是搜索但没有结果。我不熟悉typescript语法。我可以写一下这个数组的初始化吗?也许就像这样:
model.FlightQuotes = [new CFlightClassQuote{Class = 'A'}, new CFlightClassQuote {Class = 'B'}];
对于填充了类型对象的数组的简短初始化,您可以使用Object.assign
:
model.FlightQuotes = [
Object.assign(new CFlightClassQuote(), {
'Class': 'A',
ClassName: 'B'
}),
Object.assign(new CFlightClassQuote(), {
'Class': 'C',
ClassName: 'D'
}),
];
TypeScript没有您在问题中显示的初始化样式(即C#样式初始值设定项)。
您可以使用构造函数创建一个新的:
model.FlightQuotes = [
new CFlightClassQuote('A'),
new CFlightClassQuote('B')
];
或者如果CFlightClassQuote
只是一个没有行为的结构,你可以使用下面的(你必须提供所有成员) - 如果你的类有方法等,这将无法工作,但适用于接口/结构:
model.FlightQuotes = [
{ Class: 'A' },
{ Class: 'B' },
];
或者您可以创建一个静态映射器方法,该方法接收成员,创建新实例并映射属性 - 因此至少您不必重复该映射:
model.FlightQuotes = [
CFlightClassQuote.FromObject({ Class: 'A' }),
CFlightClassQuote.FromObject({ Class: 'B' }),
];
另一个解决方案:
model.FlightQuotes = [{
Class: 'A',
ClassName: 'B'
} as CFlightClassQuote,
{
Class: 'C',
ClassName: 'D'
} as CFlightClassQuote),
];