如何将@ types / module与为类型编写的npm模块结合使用?

时间:2018-06-20 21:54:54

标签: javascript typescript npm

这只是我项目中某些模块的示例。

npm模块多标签有https://github.com/mapbox/polylabel个TypeScript类型定义。现在,当我确实安装npm install --save @types/polylabel时,我得到了类型,但是当我安装npm install --save polylabel时,我得到了npm模块,它是自己的。

所以我的问题是如何导入polylabel,但要让该模块使用来自该@types/polylabel的TypeScript类型定义?示例:

import polylabel from "polylabel";

export default class SomeClass extends Base {

   console.log(polylabel(coordinates, 1.0))
}

现在这将不起作用,因为打字稿会尝试从模块本身导入没有功能的定义函数。

我应该将其自身模块包含在webpack中,还是将其自身包含在其他方法中? Webpack部分:

new webpack.ProvidePlugin({
  polylabel: 'polylabel'
}),

我希望我想解决/需要解决的问题很清楚。

1 个答案:

答案 0 :(得分:1)

只要您设置tsconfig.json来引用@types目录,它就会始终使用可用的类型。有时npm软件包会附带类型定义,但在很多情况下却没有。这是您需要运行npn install @types/<module> --save-dev

的时候

示例tsconfig.json

{
  "compileOnSave": true,
  "compilerOptions": {
    "baseUrl": "src",
    "sourceMap": true,
    "declaration": false,
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types" // <-- This guy
    ],
    "lib": [
      "es2016",
      "dom"
    ]
  },
  "exclude": [
    "node_modules",
    "e2e"
  ]
}