我有这样的界面:
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
,但这需要直接从界面复制粘贴参数。我想知道是否可以通过以某种方式引用接口的成员函数的名称来键入它。
答案 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;