TypeScript-无法在其他类型根目录TS7016

时间:2018-09-23 06:49:07

标签: node.js typescript feathersjs

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

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

"typeRoots": [                            /* List of folders to include type definitions from. */
      "./types",
      "node_modules/@types"
    ],

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

我将文件夹feathersjs__feathers放在./types的{​​{1}}中(已删除index.d.ts),其中包含与DefinitelyTyped类型完全相同的副本。

此行引起了此问题:package.json

  

TS7016   找不到模块'@ feathersjs / feathers'的声明文件。 'C:/ Users / marek / dev / system / api-kopia/node_modules/@feathersjs/feathers/lib/index.js'隐式为'any'类型。   如果存在或添加包含import * as self from '@feathersjs/feathers';的新声明(.d.ts)文件,请尝试npm install @types/feathersjs__feathers

我试图将declare module 'feathersjs__feathers';添加到我的文件夹中,如下所示:

package.json

,但是对于该问题没有帮助。 如果我安装了{ "name": "@types/feathersjs__feathers", "version": "0.0.1", "types": "index.d.ts" } ,那么它在@types/feathersjs__feathers中就没有错误,但是无论node_modules中的顺序如何,它都会从该类型中获取类型,而不是从我的替代中获取类型。

有什么解决办法吗?

通常使用typeRoots的配置和使用./types的文件夹例如对于index.d.ts,我在这里输入了自己的文字,并且它们可以正常工作。问题只在于导入自我...

1 个答案:

答案 0 :(得分:3)

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

paths

这对我来说似乎是糟糕的设计,但the TypeScript team has already said once that the behavior is intentional如此,因此我认为不值得提出一个错误来要求他们进行更改。

(我注意到Stack Overflow的“相关”小部件发现an answer基本上可以回答您的问题,尽管IMO并没有我的回答那么清楚。)