当我在项目上运行tsc
时,我说了一个错误
node_modules/@my/my-lib/src/menu/link/multiSelectList.d.ts(1,44): 错误TS7016:找不到模块的声明文件 'webdriverio'。 'D:/ GIT /我的自动化测试/app1-test/node_modules/webdriverio/build/index.js' 隐式地具有“ any”类型。
这是详细信息:
下图为原始图。 @my/my-lib
是我的图书馆。它将部署在内部NPM注册表中,并由其他项目使用。
我必须更改spectron
中的某些内容,因此我做了并将其部署在内部NPM上。然后我发现依赖项@types/webdriverio
存在很多问题。因此,我修复了它们,并将定义文件webdriverio.d.ts
添加到了@my/my-lib
中。我测试了@my/my-lib
,这很好。
更改列表:
webdriverio.d.ts
添加到了/src/typings
import { SpectronClient } from '@my/spectron';
"typeRoots"
。这是tsconfig.json
{
"compilerOptions": {
"target": "ES2017",
"module": "commonjs",
"outDir": "./dist",
"strict": true,
"moduleResolution": "node",
"sourceMap": true,
"declaration": true,
"typeRoots": [
"./node_modules/@types",
"./src/typings"]
},
"include": [
"./src/**/*",
"./test/**/*",
"./index.ts"
],
"exclude": [
"node_modules",
"dist"
]
}
然后我将@my/my-lib
打包并部署到内部NPM上。之后,我创建了一个新项目“ app1-test”,并安装了@my/my-lib
。
在这个新项目上运行tsc
时,出现上面的错误。
问题是,我需要像这样在“ app1-test”中添加"typeRoots"
吗?
{
"compilerOptions": {
...
"declaration": true,
"typeRoots": [
"./node_modules/@types",
"./node_modules/@my/my-lib/src/typings"]
},
...
}
有人可以帮我吗?
答案 0 :(得分:0)
根据doc,您可以精细控制tsc如何发现具有多种策略的模块的类型。
以下是我为您推荐的解决方案,所有步骤均适用于app1-test
。
@types/webdriverio
,将其修复并放入内部npm注册表,并以@goodtypes/webdriverio
的形式发布@goodtypes/webdriverio
,而不是@types/webdriverio
tsconfig.json -> compilerOptions -> typeRoots
= ["./node_modules/@types", "./node_modules/@goodtypes"]
如果您希望将好的类型放入源代码中而不是作为npm包发布,只需将源的路径指定为typeRoots
的项即可。