【发布时间】:2021-07-09 21:12:21
【问题描述】:
我正在开发一个电容器插件,我需要定义可能的事件监听器。
该插件的旧实现有一个大接口,所有可能的侦听器都在同一个文件中,例如:
export interface Plugin {
addListener(
eventName: 'bannerShow',
listenerFunc: (info: any) => void,
): PluginListenerHandle;
addListener(
eventName: 'bannerHide',
listenerFunc: (info: string) => void,
): PluginListenerHandle;
addListener(
eventName: 'rewardShow',
listenerFunc: (info: SomeInterface) => void,
): PluginListenerHandle;
addListener(
eventName: 'rewardHide',
listenerFunc: (info: string) => void,
): PluginListenerHandle;
}
我将其分开,这样更容易维护,以这种方式:
export interface Plugin extends Banner, Reward {
// General plugin calls here
}
// Other file
export interface Banner {
specificBannerFunction(): void;
addListener(
eventName: 'bannerShow',
listenerFunc: (info: any) => void,
): PluginListenerHandle;
addListener(
eventName: 'bannerHide',
listenerFunc: (info: string) => void,
): PluginListenerHandle;
}
// Other file
export interface Reward {
specificRewardFunction(): string;
addListener(
eventName: 'rewardShow',
listenerFunc: (info: SomeInterface) => void,
): PluginListenerHandle;
addListener(
eventName: 'rewardHide',
listenerFunc: (info: string) => void,
): PluginListenerHandle;
}
问题是 Typescript 说:
接口“插件”不能同时扩展类型“横幅”和“插页式”。 'Banner' 和 'Interstitial' 类型的命名属性 'addListener' 不相同
如何让 typescript 知道我正在重载该函数调用?
【问题讨论】:
标签: typescript