Aurelia / Typescript - 尝试将变量集的一个元素设置为接口时出错

时间:2018-01-06 05:52:12

标签: typescript aurelia

我有一个Aurelia视图模型,在compose标签中使用如下:

    <compose view-model="../address/address" view='../address/address.html' model.bind ="client.address"></compose>

有效。在某些情况下,我将地址的值作为client.address传递,当它可用时,它可以工作,否则所有字段都作为“创建”页面工作,并且为空。

其中一个地址组件是“状态”下拉组件。就在这里:

<div class="col-md-3">
    <div class="form-group">
        <label class="control-label col-md-6">State:</label>
        <div class="col-md-5">
            <aubs-typeahead data.bind="states" value.bind="address.stateShortName" placeholder="State..." open-on-focus.bind="true"></aubs-typeahead>
        </div>
    </div>
</div>

请注意,我已将下拉列表绑定到“address.stateShortName”再次这样做并显示父节点的状态名称,在本例中为客户端。

在我没有数据要绑定的情况下,我想用默认值填充状态下拉列表但是我遇到了为绑定变量“address.stateShortName”赋值的问题

  

错误TS2339(TS)属性'stateShortName'在'never'类型上不存在。

Address.ts的主要变量“address”设置为包含地址视图模型的所有变量的接口:

    interface AddressDetails {
        address1: string;
        address2: string;
        suburb: string;
        postcode: string;
        stateShortName: string;
        addressLocationId: number;
    }

您可以看到我将“stateShortName”作为其中一个元素。

在地址视图模型中,我将地址设置为AddressDetails接口:

export class Address {
address: AddressDetails;

因此,当我遇到我没有将模型传递给此视图模型的情况时,我反而希望将状态设置为默认值...说“VIC”同时我获取状态下拉列表(其中但是当我尝试在获取之后设置此值address.stateShortName时,我收到了上述错误。

    fetch("/api/selectData/GetStatesAndCompanyStateId", {
        method: "GET",
        headers
    })
        .then(response => response.json())
        .then(data => {
            for (const key in data.stateDropDownList) {
                this.states[key] = data.stateDropDownList[key].stateShortName;
            }

            if (!this.address) {

                this.address.stateShortName = data.companyStateShortName //HERE!
            }
        })

当指示整个变量未定义时,如何在地址变量中设置此单个元素“address.stateShortName”?

如何设置“地址”,使其至少具有空值,并避免在未设置的情况下未定义?

1 个答案:

答案 0 :(得分:1)

首先,为什么要在撰写标记中添加视图模型和视图等?只有视图模型就足够了(另见文档here

<compose view-model="../address/address" view='../address/address.html' model.bind ="client.address"></compose>

也可以

<compose view-model="../address/address"></compose>

据我所知,你有一个专用的界面文件?如果是,您是否在地址类中导入了接口文件?

这是一个很好的文档,说明如何使用typescript的接口:Documentation