将未类型化的JavaScript选项属性添加到声明的类

时间:2018-12-11 13:40:38

标签: typescript koa-router

我正在使用DefinitelyTyped repository中的koa-router类型声明。类声明不包含opts属性的定义,这意味着尝试访问该属性将产生TS2339错误。

除了非类型化的解决方法外,例如(routerObj as any).opts.<option>,如何使用IRouterOptions的类型将该属性添加/扩展到已经存在的定义?

*编辑*

我尝试了module augmentation,但失败了:

import Router from 'koa-router';

declare module 'koa-router' {
  class Router {
    opts: Router.IRouterOptions
  }
}

并按照上面的文档

import Router from 'koa-router';

declare module 'koa-router' {
  interface Router<T> {
    opts: Router.IRouterOptions
  }
}

这些都不起作用。我从VSCode获得的错误消息也很奇怪,这使我相信TS将我对增值和DefinitelyTyped定义的尝试视为独立的定义:Property 'opts' does not exist on type 'import("/Absolute/Path/To/node_modules/@types/koa-router/index.d.ts")'.

但是,从DefinitelyTyped定义扩展另一个接口确实可以:

import Router from 'koa-router';

declare module 'koa-router' {
  interface IRouterOptions {
    requiredVar: boolean;
  }
}

这将产生一个TS2322: Type '{}' is not assignable to type 'IRouterOptions'. Property 'requiredVar' is missing in type '{}'.

0 个答案:

没有答案