TypeScript 找不到模块 flatpickr,即使它包含 typescript 类型

TypeScript can't find module flatpickr, even though it includes typescript types

我正在尝试导入一个包含 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 找到包含的类型定义?

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

你需要改变的是将 tsconfig.json 设置为 "moduleResolution": "node" 或者使用 "module": "commonjs" 将发出的模块和解析机制切换为node.js 标准。

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

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