输入一个变量,使其符合(非静态)成员函数

时间:2017-05-18 09:19:56

标签: typescript types interface

我有这样的界面:

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

我希望在onDRMMessageResult签名后实例化一个resultHandler,但我不确定如何编写该类型(我已尝试DRMAgent.onDRMMessageResult以下,但这抱怨:"TS2339: Property 'onDRMMessageResult' does not exist on type typeof DRMAgent",大概是因为它不是静态属性。)

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

resultHandler撰写类型的正确方法是什么?

注意:我知道我可以将其键入(msgID: string, resultMsg: string, resultCode: number)=>any,但这需要直接从界面复制粘贴参数。我想知道是否可以通过以某种方式引用接口的成员函数的名称来键入它。

1 个答案:

答案 0 :(得分:1)

您可以使用文字声明它:

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;

或者只使用一个类型别名:

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;