web-dev-qa-db-fra.com

Dactylographe: instruction require ne faisant pas partie d'une instruction d'importation

TypeScript version 2.2.2

J'ai écrit ce besoin dans mon UserRoutzr.ts

const users = <IUser[]> require(path.join(process.cwd() + "/data"));

TSLint lance l'avertissement suivant:

require statement not part of an import statement

si je l'ai changé pour:

import users = <IUser[]> require(path.join(process.cwd() + "/data"));

Ensuite, il soulève une erreur:

TS1003 Identifier expected

Comment dois-je réécrire cette condition? ?__. Merci pour vos commentaires

6
user762579

Les modules TypeScript sont une implémentation des modules ES6. Les modules ES6 sont statiques. Votre problème provient du chemin dynamique: path.join(process.cwd() + "/data"). Le compilateur ne peut pas déterminer le module à la compilation.

Vous devez utiliser un chemin statique vers le module. Au moment de la compilation, TypeScript le résout. Et cela affecte le type exporté à droite (IUser[]) à users.

import users = require("./yourModuleThatExportsUsers");

Remarque: Si votre module data contient uniquement des données, vous pouvez envisager de le remplacer par un fichier JSON, qui pourrait être chargé (Node.js) ou fourni (Webpack).

9
Paleo

peut-être avez-vous besoin de chargement dynamique du module , et le code comme ceci:

import {IUser} from './lib/user';
const users:IUser[] = require(path.join(process.cwd() + "/data"));
1
holi-java