0

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

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

*编辑*

我尝试了模块扩充,但没有成功:

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 将我的扩充尝试和肯定类型定义视为独立定义:Property 'opts' does not exist on type 'import("/Absolute/Path/To/node_modules/@types/koa-router/index.d.ts")'.

但是,从 DefinitiveTyped 定义中扩充另一个接口确实有效:

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 '{}'.

4

0 回答 0