Το TypeScript λαμβάνει σφάλμα TS2304: δεν μπορεί να βρει το όνομα ' require&#39,

Προσπαθώ να βάλω σε λειτουργία την πρώτη μου εφαρμογή TypeScript και DefinitelyTyped Node.js και αντιμετωπίζω κάποια σφάλματα.

Λαμβάνω το σφάλμα "TS2304: Cannot find name 'require' " όταν προσπαθώ να μεταφράσω μια απλή σελίδα TypeScript Node.js. Έχω διαβάσει αρκετές άλλες περιπτώσεις αυτού του σφάλματος στο Stack Overflow και δεν νομίζω ότι έχω παρόμοια προβλήματα. Εκτελώ στην προτροπή του κελύφους την εντολή:

tsc movie.server.model.ts.

Τα περιεχόμενα αυτού του αρχείου είναι τα εξής:

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

Το σφάλμα δημιουργείται στη γραμμή var mongoose=require('mongoose').

Τα περιεχόμενα του αρχείου typings/tsd.d.ts είναι τα εξής:

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

Οι αναφορές του αρχείου .d.ts τοποθετήθηκαν στους κατάλληλους φακέλους και προστέθηκαν στο typings/tsd.d.ts με τις εντολές:

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

Το παραγόμενο αρχείο .js φαίνεται να λειτουργεί κανονικά, οπότε θα μπορούσα να αγνοήσω το σφάλμα. Αλλά θα εκτιμούσα να γνωρίζω γιατί εμφανίζεται αυτό το σφάλμα και τι κάνω λάθος.

Μπορείτε να

declare var require: any

Ή, για πιο ολοκληρωμένη υποστήριξη, χρησιμοποιήστε DefinitelyTyped's require.d.ts

Επίσης, αντί για var mongoose = require('mongoose'), θα μπορούσατε να δοκιμάσετε το εξής

import mongoose from 'mongoose' // or
import mongoose = require('mongoose')
Σχόλια (4)

Αντί για:

'use strict';

/// 

Δοκιμάστε:

/// 

'use strict';

δηλ. το μονοπάτι αναφοράς πρώτα.

Σχόλια (1)

Βρήκα ότι η λύση ήταν να χρησιμοποιήσω την εντολή TSD:

tsd install node --save

η οποία προσθέτει/ενημερώνει το αρχείο typings/tsd.d.ts και το αρχείο αυτό περιέχει όλους τους ορισμούς τύπων που απαιτούνται για μια εφαρμογή κόμβου.

Στην αρχή του αρχείου μου, βάζω μια αναφορά στο tsd.d.ts ως εξής:

/// 

Το require ορίζεται ως εξής από τον Ιανουάριο του 2016:

declare var require: NodeRequire;

interface NodeModule {
    exports: any;
    require: NodeRequireFunction;
    id: string;
    filename: string;
    loaded: boolean;
    parent: any;
    children: any[];
}
Σχόλια (1)