İlk TypeScript ve DefinitelyTyped Node.js uygulamamı çalıştırmaya çalışıyorum ve bazı hatalarla karşılaşıyorum.
Basit bir TypeScript Node.js sayfasını transpile etmeye çalıştığımda "TS2304: Cannot find name 'require' " hatası alıyorum. Stack Overflow'da bu hatanın diğer birkaç oluşumunu okudum ve benzer sorunlarım olduğunu sanmıyorum. Kabuk isteminde şu komutu çalıştırıyorum:
tsc movie.server.model.ts.
Bu dosyanın içeriği şöyledir:
'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';
Hata var mongoose=require('mongoose')
satırında atılır.
typings/tsd.d.ts dosyasının içeriği şöyledir:
/// <reference path="node/node.d.ts" />
/// <reference path="requirejs/require.d.ts" />
.d.ts dosya referansları uygun klasörlere yerleştirildi ve komutlar tarafından typings/tsd.d.ts dosyasına eklendi:
tsd install node --save
tsd install require --save
Üretilen .js dosyası sorunsuz çalışıyor gibi görünüyor, bu yüzden hatayı görmezden gelebilirim. Ancak bu hatanın neden oluştuğunu ve neyi yanlış yaptığımı bilmek isterim.
Yapabilirsin
declare var require: any
Ya da daha kapsamlı destek için DefinitelyTyped's require.d.ts kullanın.
Ayrıca, var mongoose = require('mongoose')
yerine aşağıdakileri deneyebilirsiniz
import mongoose from 'mongoose' // or
import mongoose = require('mongoose')
Çözümün TSD komutunu kullanmak olduğunu buldum:
tsd install node --save
Bu da typings/tsd.d.ts
dosyasını ekler/günceller ve bu dosya bir node uygulaması için gerekli olan tüm tip tanımlarını içerir.
Dosyamın en üstüne tsd.d.ts
dosyasına şu şekilde bir referans koydum:
/// <reference path="../typings/tsd.d.ts" />
İhtiyaç Ocak 2016 itibariyle bu şekilde tanımlanmıştır:
declare var require: NodeRequire;
interface NodeModule {
exports: any;
require: NodeRequireFunction;
id: string;
filename: string;
loaded: boolean;
parent: any;
children: any[];
}