我在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;
}
}
答案 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;
}
}