TypeScript-无法在其他类型根目录TS7016中的类型覆盖中导入自身

M U*_*M U 2 node.js typescript feathersjs

我正在使用FeathersJS和TypeScript。由于它仍在开发中(用于羽毛的TS),我发现我需要重写类型以使其能够适应我的情况(例如,可以禁用或启用分页,并且类型应能处理,但此刻不行) 。

在我的tsconfig.json中,我有以下内容:

"typeRoots": [                            /* List of folders to include type definitions from. */
      "./types",
      "node_modules/@types"
    ],
Run Code Online (Sandbox Code Playgroud)

顺序并不重要,因为我也首先尝试过使用node_modules。

我把文件夹feathersjs__feathers./types只有index.d.ts(删除package.json)从DefinitelyTyped类型的精确副本。

这行引起了问题: import * as self from '@feathersjs/feathers';

TS7016找不到模块'@ feathersjs / feathers'的声明文件。“ C:/ Users / marek / dev / system / api — kopia/node_modules/@feathersjs/feathers/lib/index.js”隐式具有“ any”类型。尝试  npm install @types/feathersjs__feathers 是否存在或添加包含以下内容的新声明(.d.ts)文件 declare module 'feathersjs__feathers';

我试图将添加package.json到我的文件夹中,如下所示:

{
  "name": "@types/feathersjs__feathers",
  "version": "0.0.1",
  "types": "index.d.ts"
}
Run Code Online (Sandbox Code Playgroud)

但这并不能解决该问题。如果我安装了@types/feathersjs__feathersnode_modules,则没有错误,但是无论typeRoots它以什么顺序从该类型中获取类型,而不是从我的替代中获取类型。

有什么解决办法吗?

通常使用./types和的配置index.d.ts都可以,例如,因为feathers-mongoose我在那里输入了自己的文字,并且它们可以正常工作。问题只在于导入自我...

Mat*_*hen 8

typeRoots只能帮助TypeScript编译器为types选项(或/// <reference types="..."/>指令)找到要加载的文件,以使declare module "..." { ... }它们包含任何全局声明。但是index.d.ts文件为@feathersjs/feathers不使用declare module "..." { ... }; 它旨在通过TypeScript的主模块解析过程作为模块本身找到。该过程不兑现typeRootsnode_modules/@types当在中找到未类型化的模块时,很难进行查找node_modules。为了使模块分辨率看起来更合适,您必须使用baseUrlpaths选项:

{
    "compilerOptions": {
        // ...
        "baseUrl": ".",
        "paths": {
            "@feathersjs/feathers": ["types/feathersjs__feathers"]
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在我看来,这似乎是糟糕的设计,但是TypeScript团队曾经说过这种行为是故意的,所以我认为不值得提出一个错误来要求他们进行更改。

(我注意到“堆栈溢出”“相关”小部件找到了一个基本上可以回答您问题的答案,尽管IMO并不像我的回答那么明确。)