TypeScript obtient l'erreur TS2304 : cannot find name &#39 ; require&#39 ;

J'essaie de mettre en place ma première application TypeScript et DefinitelyTyped Node.js, et je rencontre quelques erreurs.

J'obtiens l'erreur "TS2304 : Cannot find name 'require&#39 ; &quot ; lorsque j'essaie de transpiler une simple page TypeScript Node.js. J'ai lu plusieurs autres occurrences de cette erreur sur Stack Overflow, et je ne pense pas avoir de problèmes similaires. J'exécute à l'invite du shell la commande :

tsc movie.server.model.ts.

Le contenu de ce fichier est :

'use strict';

/// <reference path="typings/tsd.d.ts" />

/*    movie.server.model.ts - definition of movie schema */

var mongoose = require('mongoose'),
Schema = mongoose.Schema;

var foo = 'test';

L'erreur se produit à la ligne var mongoose=require('mongoose&#39 ;).

Le contenu du fichier typings/tsd.d.ts est le suivant :

/// <reference path="node/node.d.ts" />
/// <reference path="requirejs/require.d.ts" />

Les références du fichier .d.ts ont été placées dans les dossiers appropriés et ajoutées à typings/tsd.d.ts par les commandes :

tsd install node --save
tsd install require --save

Le fichier .js produit semble fonctionner correctement, je pourrais donc ignorer l'erreur. Mais j'aimerais savoir pourquoi cette erreur se produit et ce que je fais de mal.

Vous pouvez

declare var require: any

Ou, pour un support plus complet, utilisez [DefinitelyTyped's require.d.ts][1].

Aussi, au lieu de var mongoose = require('mongoose&#39 ;), vous pouvez essayer ce qui suit

import mongoose from 'mongoose' // or
import mongoose = require('mongoose')

[1] : https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/requirejs/require.d.ts

Commentaires (4)

Au lieu de :

'use strict';

/// 

Essayez :

/// 

'use strict';

c'est-à-dire le chemin de référence en premier.

Commentaires (1)

J'ai trouvé que la solution était d'utiliser la commande TSD :

tsd install node --save

qui ajoute/met à jour le fichier typings/tsd.d.ts et ce fichier contient toutes les définitions de type qui sont requises pour une application de noeud.

En haut de mon fichier, je mets une référence au fichier tsd.d.ts comme ceci :

/// 

L'exigence est définie comme ceci à partir de janvier 2016 :

declare var require: NodeRequire;

interface NodeModule {
    exports: any;
    require: NodeRequireFunction;
    id: string;
    filename: string;
    loaded: boolean;
    parent: any;
    children: any[];
}
Commentaires (1)