我正在使用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
,我在这里输入了自己的文字,并且它们可以正常工作。问题只在于导入自我...
答案 0 :(得分:3)
typeRoots
仅有助于TypeScript编译器为types
选项(或/// <reference types="..."/>
指令)加载要加载的文件,以使它们包含的任何declare module "..." { ... }
和全局声明。但是index.d.ts
的{{1}}文件没有使用@feathersjs/feathers
;它旨在通过TypeScript的主模块解析过程作为模块本身找到。该过程不支持declare module "..." { ... }
,并且在typeRoots
中找到未类型化的模块时,很难在node_modules/@types
中查找。要使模块分辨率看起来更合适,您必须使用node_modules
和baseUrl
选项:
paths
这对我来说似乎是糟糕的设计,但the TypeScript team has already said once that the behavior is intentional如此,因此我认为不值得提出一个错误来要求他们进行更改。
(我注意到Stack Overflow的“相关”小部件发现an answer基本上可以回答您的问题,尽管IMO并没有我的回答那么清楚。)