TypeScript erhält den Fehler TS2304: kann den Namen ' require&#39 nicht finden;

Ich versuche, meine erste TypeScript- und DefinitelyTyped-Node.js-Anwendung zum Laufen zu bringen, und stoße dabei auf einige Fehler.

Ich erhalte die Fehlermeldung "TS2304: Cannot find name 'require' ", wenn ich versuche, eine einfache TypeScript Node.js Seite zu transpilieren. Ich habe durch mehrere andere Vorkommen dieses Fehlers auf Stack Overflow gelesen, und ich glaube nicht, dass ich ähnliche Probleme haben. Ich führe an der Shell-Eingabeaufforderung den Befehl aus:

tsc movie.server.model.ts.

Der Inhalt dieser Datei ist:

'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';

Der Fehler wird in der Zeile var mongoose=require('mongoose') ausgelöst.

Der Inhalt der Datei typings/tsd.d.ts ist:

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

Die Verweise auf die .d.ts-Datei wurden in den entsprechenden Ordnern abgelegt und durch die Befehle zu typings/tsd.d.ts hinzugefügt:

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

Die erzeugte .js-Datei scheint gut zu funktionieren, so dass ich den Fehler ignorieren kann. Aber ich würde gerne wissen, warum dieser Fehler auftritt und was ich falsch mache.

Sie können

declare var require: any

Oder, für umfassendere Unterstützung, verwenden Sie DefinitelyTyped's require.d.ts

Anstelle von var mongoose = require('mongoose') könnten Sie auch Folgendes versuchen

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

Anstelle von:

'use strict';

/// 

Versuchen Sie es:

/// 

'use strict';

d.h. zuerst den Referenzpfad.

Kommentare (1)

Ich fand die Lösung in der Verwendung des TSD-Befehls:

tsd install node --save

Damit wird die Datei "typings/tsd.d.ts" hinzugefügt/aktualisiert, die alle Typdefinitionen enthält, die für eine Knotenanwendung erforderlich sind.

Am Anfang meiner Datei setze ich einen Verweis auf die Datei tsd.d.ts wie folgt:

/// 

Die Anforderung ist ab Januar 2016 wie folgt definiert:

declare var require: NodeRequire;

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