Lorsque j'importe le module de nœud installé "date-fns" à l'aide
import { startOfDay } from 'date-fns';
alors j'obtiens une erreur de compilation:
error TS2307: Cannot find module 'date-fns'.
Cependant, ce qui suit ne donne aucune erreur:
var startOfDay = require('date-fns');
Une idée pourquoi cela se produit?
Voici mes date-fns installés:
node_modules/date-fns/
├── start_of_day
│ ├── index.js
│ └── index.js.flow
Essayez d'utiliser ceci à la place Importez d'abord les modules
Dans le type de terminal
npm install date-fns @types/date-fns
Puis en code
import * as startOfDay from "date-fns";
Si vous souhaitez uniquement utiliser la fonction start_of_day, vous devez plutôt suivre documentation .
Installation avec npm
npm install date-fns --save
ou avec du fil:
yarn add date-fns
Exemple d'utilisation:
// 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
Les options 1 et 2 devraient permettre à la plupart des outils de construction d'inclure facilement uniquement ce que vous utilisez réellement, ce qui rend votre ensemble final plus petit et donc votre application Web se charge légèrement plus rapidement. Webpack 4 et éventuellement d'autres outils de construction qui regardent l'indicateur sideffect
ajouté à la bibliothèque seront également en mesure de faire trembler l'option 3, étant donné que vous utilisez 2.0.0-alpha.25 ou supérieur.
La modularité générale des date-fns est actuellement le principal avantage que je vois par rapport aux "moments" les plus populaires et établis. Bien que l'auteur explique également d'autres avantages dans n problème de github .
Les deux solutions de travail mentionnées récupèrent simplement l'intégralité de la bibliothèque "date-fns" et en tant que telle est toujours une syntaxe valide mais le fait d'étiqueter la variable comme "startOfDay" donne l'impression que la seule partie réellement chargée ou utilisée est cette fonction. Lorsque toutes les autres fonctions sont également chargées en vain. Où "start_of_day" n'est qu'une des nombreuses fonctions chargées sur le même objet.
Donc, si vous voulez vraiment charger toutes les fonctions, vous devriez plutôt appeler la variable "date-fns". Cependant, étant donné la facilité et les avantages, je ne vois pas pourquoi vous ne suivriez pas simplement la documentation et importeriez des fonctions individuelles.
EDIT: Avec TypeScript 2+, vous obtiendrez les définitions de type directement à partir de la bibliothèque (version 1.23+).
Les versions antérieures (version 1.22.x et inférieure) devraient plutôt suivre les conseils d'Edwin Kato sur l'installation des définitions de type pour "date-fns". Vous devez cependant également l'enregistrer dans vos dépendances de développement locales dans "package.json". Vous devrez l'indiquer explicitement lors de l'utilisation de npm. Alors qu'avec le fil, vous devez indiquer qu'il s'agit d'une dépendance au développement et non d'une dépendance régulière.
Vous devez donc l'installer comme ceci avec npm:
npm install @types/date-fns --save-dev
ou avec du fil:
yarn add @types/date-fns --dev
Dois-je dire à la place
import * as startOfDay from 'date-fns/startOfDay';
Il semble que j'aie fait des choses similaires avec d'autres bibliothèques dans Angular Code TypeScript.
Je pense que c'est une meilleure approche
import {differenceInCalendarDays, parseISO } from 'date-fns';