如何为环境模块(车把)使用本地NPM包TS类型?

时间:2019-05-03 01:22:23

标签: typescript handlebars.js webpack-4

我正在尝试将npm i handlebars集成到我现有的TS(v 3.4.5)项目中,但是始终获得TS2307: Cannot find module 'handlebars'.

我在分散在各个文件中的几个不同模块中使用把手。

根据此merged feature,维护者将DefinitelyTyped的类型导入到车把仓库中,然后他们对@types/handlebars包进行了折旧。

TS似乎无法找到回购类型,并从上方显示TS2307错误。

我能够进行干净编译的唯一方法是,将.d.ts文件从存储库中手动复制到一个自制的@ types / handlebars文件夹中。

那时我只要执行以下一项操作即可:

  • import Handlebars from "handlebars";
  • import * as Handlebars from "handlebars"
  • import "handlebars"

在仅1个使用把手的文件中,我能够生成无错误的构建。

我的tsconfig.json看起来像这样:

{
  "compileOnSave": false,
  "compilerOptions": {
    "allowSyntheticDefaultImports": true,
    "noImplicitAny": false,
    "noEmitOnError": true,
    "removeComments": true,
    "sourceMap": true,
    "module": "es6",
    "target": "es5"
  },
  "include": [
    "./Scripts/app/**/*",
  ],
  "exclude": [
    "node_modules",
  ]
}

如果没有手动复制.d.ts文件,似乎没有任何效果。

所以我有两个问题:

  1. 让Typescript识别不需要手动复制/粘贴的环境模块的正确方法是什么?

  2. 为什么TS仅在使用把手的模块之一中要求import语句?不是所有引用它的模块都需要它吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

基于link的TS文档:

  

现在,我们可以//// node.d.ts,然后使用import url = require(“ url”);加载模块。或从“ URL”中导入*作为URL。

这似乎是引用@types目录中不存在的环境模块的唯一方法。无需导入语句即可进行编译。

出于记录目的,我还尝试更新tsconfig.json的include路径以引用.d.ts,但忽略了。