背景如下:我需要在一个ts包内引入并不存在的Event类模块(当前不存在,但是实际使用时会存在,因此我无法对Events做任何修改)。我想让ts知道这个变量Events是一个符合IEvents接口的class,又不能重复declare Events,那该如何写呢? 希望能像这样使用:
main.js:
import { IEvents } from './typings/events.d.ts';
// @ts-ignore:忽略暂不存在的引入
import Events from '../../common/base/Events';
Events as IEvents; //断言Events符合IEvents接口
class Monitor extends Events implements IEvents {
constructor() {
super();
//能直接调用this.$on…等等
}
}
./typings/events.d.ts:
export interface IEvents {
$on(event: string, listener: () => {}): void;
$once(event: string, listener: () => {}): void;
$off(event: string, listener: () => {}): void;
$emit(event: string): void;
}
写个d.ts
d.ts就不要用interface了,直接写class