typescript 找不到模块'date-fns'

rqdpfwrv  于 2023-02-05  发布在  TypeScript
关注(0)|答案(4)|浏览(153)

当我使用导入已安装的节点模块"date-fns"时
import { startOfDay } from 'date-fns';
然后我得到编译错误:
error TS2307: Cannot find module 'date-fns'.
但是,以下内容不会产生任何错误:
var startOfDay = require('date-fns');
知道为什么会这样吗?
以下是我的安装日期-fns:

node_modules/date-fns/
├── start_of_day
│   ├── index.js
│   └── index.js.flow
55ooxyrt

55ooxyrt1#

请尝试使用此选项。首先导入模块
在端子类型中

npm install date-fns && npm install -D @types/date-fns

然后在代码中

import * as startOfDay from "date-fns";
bvjxkvbb

bvjxkvbb2#

如果您特别希望只使用start_of_day函数,则应遵循documentation
使用npm安装

npm install date-fns --save

或Yarn:

yarn add date-fns

示例用法:

// option 1
var startOfDay = require('date-fns/start_of_day');

// option 2
// import * as startOfDay from 'date-fns/startOfDay';

// option 3 (only 2.0.0-alpha.25 or higher)
// import { startOfDay } from 'date-fns';

// The start of a day for 2 September 2014 11:55:00:
var result = startOfDay(new Date(2014, 8, 2, 11, 55, 0));
//=> Tue Sep 02 2014 00:00:00

好处

选项1和2应该允许大多数构建工具轻松地只包含您实际使用的内容,从而使您的最终捆绑包更小,因此您的Web应用加载速度略快。Webpack 4和其他可能查看添加到库中的sideffect标志的构建工具也将能够使用treeshake选项3,进一步考虑到您使用的是2.0.0-alpha.25或更高版本。
通用模块化是目前我看到的“date-fns”与更流行和更成熟的“moment”相比的主要优势,尽管作者也解释了github问题中的其他优势。

不导入所有“date-fns”

上面提到的两种解决方案都只是获取整个“date-fns”库,因此仍然是一种有效的语法,但是将变量标记为“startOfDay”会给人一种印象,即实际加载或使用的唯一部分是该函数。此时所有其他函数也都是徒劳加载的。其中“start_of_day”只是加载在同一对象上的许多函数之一。
所以如果你真的想加载所有的函数,你应该调用变量“date-fns”,但是考虑到它的易用性和好处,我不明白为什么你不按照文档导入单个函数。

类型定义

编辑:使用TypeScript 2+,您将直接从库(版本1.23+)中获得类型定义。
更早的版本(1.22.x及更低版本)应该遵循Edwin Kato关于安装“date-fns”类型定义的建议,但也应该将其保存到本地的dev-dependencies文件“package.json”中,在使用npm时需要明确声明这一点,而使用yarn时需要声明它是一个dev-dependencies而不是常规的dependencies。
因此,您应该使用npm像这样安装它:

npm install @types/date-fns --save-dev

或Yarn:

yarn add @types/date-fns --dev
iqjalb3h

iqjalb3h3#

我应该说

import * as startOfDay from 'date-fns/startOfDay';

似乎我已经做了类似的事情与其他库的Angular typescript 代码。

zujrkrfu

zujrkrfu4#

我觉得这是个更好的办法

import  {differenceInCalendarDays, parseISO } from 'date-fns';

相关问题