找不到模块“date-fns”

问题描述 投票:0回答:5

当我使用

导入已安装的节点模块“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
angular typescript compiler-errors
5个回答
23
投票

尝试用这个代替 首先导入模块

在终端类型中

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

然后在代码中

import * as startOfDay from "date-fns";

14
投票

如果您特别只想使用 start_of_day 函数,您应该遵循 文档

使用npm安装

npm install date-fns --save

或用纱线:

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
标志的构建工具也将能够对选项 3 进行 Treeshake,进一步考虑到您使用的是 2.0.0-alpha.25 或更高版本。

Date-fns 的通用模块化是目前我认为“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”类型定义的建议。但是,您还应该将其保存到“package.json”中的本地开发依赖项中。使用 npm 时您需要明确声明这一点。使用纱线时,您需要声明它是开发依赖项,而不是常规依赖项。

因此你应该像这样使用 npm 安装它:

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

或用纱线:

yarn add @types/date-fns --dev

1
投票

我应该说吗

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

似乎我一直在 Angular Typescript 代码中的其他库中做类似的事情。


0
投票

我觉得这是一个更好的方法

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

0
投票

Ts 反应应用程序

这个效果很好

import { format } from 'date-fns';
© www.soinside.com 2019 - 2024. All rights reserved.