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 找不到模块 flatpickr,即使它包含 typescript 类型
Nuxt TypeScript 错误:nuxt:typescript 找不到模块'@/my-module'