4

我正在尝试导入一个包含 TypeScript 定义的模块。安装 @types/flatpickr 甚至会发出警告,不需要安装它。

似乎 tsc 没有获取已安装包的 *.d.ts 文件,然后简单地忽略了整个包。

我创建了一个显示问题的简单 JS 项目:https ://github.com/Strayer/typescript-import-flatpickr-issue

tsc 报告的错误信息是:

test.ts:1:23 - error TS2307: Cannot find module 'flatpickr'.

1 import flatpickr from "flatpickr";

                        ~~~~~~~~~~~

node_modules/flatpickr/dist/types安装依赖项后可以找到类型本身。

我需要做什么来帮助 TypeScript 找到包含的类型定义?

4

1 回答 1

4

你的tsconfig.json用途"module": "es6"。根据编译器选项定义,这会导致编译器以某种classic方式查找模块。classic查找适用于某些场景,但不支持通过 packages.json 定义的节点模块,flatpickr 就是这种情况。

你需要改变它来为你工作,要么设置为tsconfig.json"moduleResolution": "node"要么使用"module": "commonjs"它将发射的模块和解析机制切换到 node.js 标准。

任何一个选项都会导致你的 TypeScript 编译,因为它现在可以找到模块类型定义。

但是,您的项目现在可能无法在运行时加载模块,因为 TypeScript 无法处理。如果是这种情况并且您找不到解决方案,我建议您打开一个新问题,其中包含有关运行时的其他信息。

于 2019-02-03T10:03:02.340 回答