2017-05-18 3 views
0

ich eine Schnittstelle wie dieses:Typ eine Variable, so dass es passt sich an die Unterzeichnung eines (nicht statisch) Member-Funktion

export declare class DRMAgent extends HTMLObjectElement { 
    onDRMMessageResult(msgID: string, resultMsg: string, resultCode: number); 
} 

Und ich möchte eine resultHandler nach der Unterzeichnung von onDRMMessageResult instanziiert , aber ich bin mir nicht sicher, wie man den Typ schreibt (Ich habe DRMAgent.onDRMMessageResult unten versucht, aber dieses beschwert sich: "TS2339: Property 'onDRMMessageResult' does not exist on type typeof DRMAgent", vermutlich, weil es keine statische Eigenschaft ist).

let drmagent: DRMAgent = document.getElementById('drmagent') as DRMAgent; 
let resultHandler: DRMAgent.onDRMMessageResult = 
    (msgID: string, resultMsg: string, resultCode: number) => { 
     // handle result 
    } 
drmagent.onDRMMessageResult = resultHandler; 

Was ist der richtige Weg, den Typ für resultHandler zu schreiben?

Hinweis: Ich weiß, dass ich es als (msgID: string, resultMsg: string, resultCode: number)=>any eingeben kann, aber das erfordert Kopieren-Einfügen der Parameter direkt von der Schnittstelle. Ich würde gerne wissen, ob es möglich ist, es nur durch Bezugnahme auf den Namen der Mitgliedsfunktion der Schnittstelle irgendwie einzugeben.

Antwort

1

Sie können es mit einer wörtlichen erklären:

export declare class DRMAgent extends HTMLObjectElement { 
    onDRMMessageResult(msgID: string, resultMsg: string, resultCode: number); 
} 

let drmagent: DRMAgent = document.getElementById('drmagent') as DRMAgent; 
let resultHandler: (msgID: string, resultMsg: string, resultCode: number) => void = 
    (msgID: string, resultMsg: string, resultCode: number) => { 
     // handle result 
    } 
drmagent.onDRMMessageResult = resultHandler; 

Oder nur ein einziges Mal mit einer Art Alias:

type OnDrmMessageResult = (msgID: string, resultMsg: string, resultCode: number) => void; 

export declare class DRMAgent extends HTMLObjectElement { 
    onDRMMessageResult: OnDrmMessageResult; 
} 

let drmagent: DRMAgent = document.getElementById('drmagent') as DRMAgent; 
let resultHandler: OnDrmMessageResult = 
    (msgID: string, resultMsg: string, resultCode: number) => { 
     // handle result 
    } 
drmagent.onDRMMessageResult = resultHandler; 
Verwandte Themen