在Cast中加载时使用的TypeScript类

时间:2016-09-15 06:24:51

标签: javascript angularjs typescript

我在TypeScript中创建了一个我在演员表中使用的模型。运行应用程序时,模型未加载,我无法使用该模型上的任何函数。

模型

export class DataIDElement extends HTMLElement {
    get dataID(): number {
        var attributes: NamedNodeMap = this.attributes;
        var dataIDAttribute: Attr = attributes.getNamedItem("data-id");

        if (!dataIDAttribute) { 
            //throw error
        }

        var value: number = Number(dataIDAttribute.value);
        return value;
    }
}

角度组件(正在导入模型的位置)

import { DataIDElement } from '../../models/dataIdElement';

export class PersonComponent
{
    personClicked(event: KeyboardEvent): void {
        var element: DataIDElement = <DataIDElement>event.target;

        // This code always returns undefined (model isn't loaded)
        var personID: number = element.dataID;
    }
}

1 个答案:

答案 0 :(得分:1)

你在做什么是一种类型断言。这只会覆盖编译器的类型推断,使其认为 event.target 的类型为 DataIDElement 。它不会创建 DataIDElement 的新实例。

如果您要创建 DataIDElement 的实例,则需要使用 new 创建它。

DataIDElement 看起来像这样:

export class DataIDElement extends HTMLElement {
    constructor(private target: HTMLElement) {}
    get dataID(): number {
        var attributes: NamedNodeMap = this.target.attributes;
        var dataIDAttribute: Attr = attributes.getNamedItem("data-id");

        if (!dataIDAttribute) { 
            //throw error
        }

        var value: number = Number(dataIDAttribute.value);
        return value;
    }
}

将会像这样使用:

import { DataIDElement } from '../../models/dataIdElement';

export class PersonComponent
{
    personClicked(event: KeyboardEvent): void {
        var element: DataIDElement = new DataIDElement(event.target);

        // This code always returns undefined (model isn't loaded)
        var personID: number = element.dataID;
    }
}