TypeScript kļūst kļūda TS2304: nevar atrast nosaukumu ' require'

Es mēģinu iegūt savu pirmo TypeScript un DefinitelyTyped Node.js lietojumprogrammu, un sastopos ar dažām kļūdām.

Kad mēģinu transpilēt vienkāršu TypeScript Node.js lapu, saņemu kļūdu "TS2304: Can not find name 'require' ". Esmu izlasījis vairākus citus šīs kļūdas gadījumus vietnē Stack Overflow, un man šķiet, ka man nav līdzīgu problēmu. Es palaidu čaulas uzvednē komandu:

tsc movie.server.model.ts.

Šī faila saturs ir:

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

Kļūda tiek izmesta var mongoose=require('mongoose') rindā.

Faila typings/tsd.d.ts saturs ir šāds:

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

Atsauces uz .d.ts failiem tika ievietotas attiecīgajās mapēs un pievienotas typings/tsd.d.ts ar komandām:

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

Izveidotais .js fails, šķiet, darbojas pareizi, tāpēc es varētu ignorēt kļūdu. Taču es būtu pateicīgs, ja zinātu, kāpēc rodas šī kļūda un ko es daru nepareizi.

Jūs varat

declare var require: any

Vai arī, lai iegūtu plašāku atbalstu, izmantojiet DefinitelyTyped's require.d.ts

Arī var mongoose = require('mongoose') vietā varat izmēģināt šādu variantu

import mongoose from 'mongoose' // or
import mongoose = require('mongoose')
Komentāri (4)

Tā vietā:

'use strict';

/// 

Izmēģiniet:

/// 

'use strict';

t.i., vispirms norādiet atsauces ceļu.

Komentāri (1)

Es atklāju, ka risinājums ir izmantot komandu TSD:

tsd install node --save

Kura pievieno/atjaunina typings/tsd.d.ts failu, un šajā failā ir visas mezgla lietojumam nepieciešamās tipa definīcijas.

Savas datnes augšpusē es ievietoju atsauci uz tsd.d.ts šādā veidā:

/// 

No 2016. gada janvāra prasība ir definēta šādi:

declare var require: NodeRequire;

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