如何使用自己的打字稿定义文件?

时间:2019-04-29 05:02:03

标签: typescript typescript-typings

当我在项目上运行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注册表中,并由其他项目使用。 enter image description here

我必须更改spectron中的某些内容,因此我做了并将其部署在内部NPM上。然后我发现依赖项@types/webdriverio存在很多问题。因此,我修复了它们,并将定义文件webdriverio.d.ts添加到了@my/my-lib 中。我测试了@my/my-lib,这很好。 enter image description here

更改列表:

  1. webdriverio.d.ts添加到了/src/typings
  2. 将导入更改为import { SpectronClient } from '@my/spectron';
  3. 在tsconfig.json中添加了"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

enter image description here

在这个新项目上运行tsc时,出现上面的错误。

问题是,我需要像这样在“ app1-test”中添加"typeRoots"吗?

{
  "compilerOptions": {
   ...
    "declaration": true,
    "typeRoots": [ 
      "./node_modules/@types",
      "./node_modules/@my/my-lib/src/typings"]
  },
  ...
} 

有人可以帮我吗?

1 个答案:

答案 0 :(得分:0)

根据doc,您可以精细控制tsc如何发现具有多种策略的模块的类型。

以下是我为您推荐的解决方案,所有步骤均适用于app1-test

  1. 复制有问题的@types/webdriverio,将其修复并放入内部npm注册表,并以@goodtypes/webdriverio的形式发布
  2. 安装@goodtypes/webdriverio,而不是@types/webdriverio
  3. tsconfig.json -> compilerOptions -> typeRoots = ["./node_modules/@types", "./node_modules/@goodtypes"]

如果您希望将好的类型放入源代码中而不是作为npm包发布,只需将源的路径指定为typeRoots的项即可。