TypeScript získava chybu TS2304: nemôže nájsť názov ' require'

Snažím sa spustiť svoju prvú aplikáciu v jazyku TypeScript a DefinitelyTyped Node.js a narážam na niekoľko chýb.

Pri pokuse o transpiláciu jednoduchej stránky TypeScript Node.js dostávam chybu "TS2304: Cannot find name 'require' ". Prečítal som si niekoľko ďalších výskytov tejto chyby na Stack Overflow a myslím, že nemám podobné problémy. Spúšťam na výzvu shellu príkaz:

tsc movie.server.model.ts.

Obsah tohto súboru je:

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

Chyba je vyhodená na riadku var mongoose=require('mongoose').

Obsah súboru typings/tsd.d.ts je:

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

Odkazy na súbory .d.ts boli umiestnené do príslušných priečinkov a pridané do typings/tsd.d.ts pomocou príkazov:

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

Zdá sa, že vytvorený súbor .js funguje správne, takže som mohol ignorovať chybu. Ocenil by som však, keby som vedel, prečo sa táto chyba vyskytuje a čo robím zle.

Môžete

declare var require: any

Alebo pre komplexnejšiu podporu použite DefinitelyTyped's require.d.ts

Taktiež namiesto var mongoose = require('mongoose') môžete skúsiť nasledovné

import mongoose from 'mongoose' // or
import mongoose = require('mongoose')
Komentáre (4)

Namiesto:

'use strict';

/// 

Skúste:

/// 

'use strict';

t.j. najprv referenčná cesta.

Komentáre (1)

Zistil som, že riešením je použitie príkazu TSD:

tsd install node --save

Ktorý pridáva/aktualizuje súbor typings/tsd.d.ts a tento súbor obsahuje všetky definície typov, ktoré sú potrebné pre uzlovú aplikáciu.

Na začiatok môjho súboru som vložil odkaz na súbor tsd.d.ts takto:

/// 

Require je takto definovaný od januára 2016:

declare var require: NodeRequire;

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