求问如何断言class?

背景如下:我需要在一个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;
}
阅读 1.6k
1 个回答

写个d.ts


d.ts就不要用interface了,直接写class

export class Events {
  $on(event: string, listener: () => {}): void;
  $once(event: string, listener: () => {}): void;
  $off(event: string, listener: () => {}): void;
  $emit(event: string): void;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进