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

Posted

技术标签:

【中文标题】TypeScript 找不到模块 flatpickr,即使它包含 typescript 类型【英文标题】:TypeScript can't find module flatpickr, even though it includes typescript types 【发布时间】:2019-05-21 22:40:54 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

为此,您需要进行更改以将tsconfig.json 设置为"moduleResolution": "node",或者使用"module": "commonjs",这会将发出的模块和解析机制切换到node.js 标准。

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

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

【讨论】:

我实际上已经想通了,可以确认这是正确的,但忘了回答我自己的问题。感谢您的帮助!

以上是关于TypeScript 找不到模块 flatpickr,即使它包含 typescript 类型的主要内容,如果未能解决你的问题,请参考以下文章

误报 Typescript 找不到模块警告

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

Nuxt TypeScript 错误:nuxt:typescript 找不到模块'@/my-module'

TypeScript + moment.js:错误 TS2307:找不到模块'moment'

TypeScript 错误:找不到模块“时刻”

找不到带有 Webpack、Typescript、自定义模块目录的模块