我正在使用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 '{}'.