如何在打字稿中初始化数组?

时间:2017-11-01 10:42:57

标签: class typescript syntax

我在Angular应用中使用InMemoryDbServicemodel的某些字段是自定义类型。

以下字段是类数组:

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;

在问这个问题之前我是搜索但没有结果。我不熟悉打字稿语法。 我可以写一下这个数组的初始化吗?也许就像这样:

model.FlightQuotes = [new CFlightClassQuote{Class = 'A'}, new CFlightClassQuote {Class = 'B'}];

3 个答案:

答案 0 :(得分:1)

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' }),
 ];

答案 1 :(得分:1)

对于填充了类型对象的数组的简短初始化,您可以使用<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:layout_marginLeft="5dp" android:paddingBottom="6dp" android:paddingLeft="8dp" android:paddingRight="8dp" android:paddingTop="6dp"> <TextView android:id="@+id/chip_text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="#Tag2" android:background="@drawable/tag_background" android:marginLeft="8dp" android:marginRight="8dp" android:textColor="@android:color/white" android:textSize="14sp" /> </LinearLayout>

Object.assign

答案 2 :(得分:0)

另一种解决方案:

model.FlightQuotes = [{
        Class: 'A',
        ClassName: 'B'
    } as CFlightClassQuote,    
    {
        Class: 'C',
        ClassName: 'D'
    } as CFlightClassQuote),
];