2016-09-15 2 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

. 방금 event.target 안에있는 것이 무엇이든 DataIDElement 유형이라고 말하고 있습니다. 이 클래스의 새 인스턴스를 만들지는 않습니다. – toskv

답변

1

은 당신이하고있는 것은 형의 주장이다. 컴파일러의 형식 유추를 덮어 쓰면 event.targetDataIDElement입니다. DataIDElement의 새 인스턴스를 만들지 않습니다.

DataIDElement의 인스턴스를 만들려면 new을 사용해야합니다.

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은 다음과 같이 보일 것이다

이 유형 주장의 캐스트가 아닌
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; 
    } 
} 
관련 문제