2016-09-15 4 views
0

キャストで使用している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; 
    } 
} 
+2

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; } } 

そして、このように使用されます:

DataIDElementは、次のようになります。あなたは、event.targetの中にあるものはすべてDataIDElement型であると言っているだけです。そのクラスの新しいインスタンスは作成されません。 – toskv

答えて

1

。これは、event.targetDataIDElementであると信じさせるためにコンパイラの型推論を上書きするだけです。 DataIDElementの新しいインスタンスは作成されません。

あなたが新しいを使用して作成する必要がDataIDElementのインスタンスを作成したい場合。それが型アサーションのキャストではありません

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; 
    } 
} 
関連する問題