नोडज को टाइपस्क्रिप्ट फ़ाइल के अंदर की आवश्यकता होती है


97

मैं node_modulesएक TypeScriptकक्षा के भीतर से नियमित एनओडीजेएस मॉड्यूल (से ) कैसे लोड करूं ?

जब मैं .tsउस फ़ाइल को संकलित करने की कोशिश करता हूं जिसमें शामिल है:

var sampleModule = require('modulename');

कंपाइलर संकेत देता है कि मैं इस दायरे में आवश्यकता का उपयोग नहीं कर सकता। (वह लाइन फ़ाइल की शुरुआत में है)।


1
क्या आप हमें अपना कोड (मूल और संकलित) दिखा सकते हैं? मैंने सोचा कि requireइसका इस्तेमाल कहीं भी किया जा सकता है, यह गुंजाइश पर निर्भर नहीं करता है।
अजीब

हां, लेकिन घोषित किया जाना है और डिफ़ॉल्ट lib.d.ts में घोषित नहीं किया गया है जैसा कि वैलेंटाइन ने सुझाव दिया था।
Zdenek Sejcek

जवाबों:


105

टाइपस्क्रिप्ट हमेशा शिकायत करेगा जब यह एक प्रतीक खोजने में असमर्थ है। कंपाइलर डिफ़ॉल्ट परिभाषाओं के एक सेट के साथ आता है window, documentऔर इस तरह के एक फ़ाइल में निर्दिष्ट किया जाता है lib.d.ts। अगर मैं requireइस फ़ाइल के लिए एक grep करता हूं तो मुझे फ़ंक्शन की कोई परिभाषा नहीं मिल सकती है require। इसलिए, हमें संकलक को स्वयं बताना होगा कि यह कार्य declareवाक्य विन्यास का उपयोग करके रनटाइम में मौजूद होगा :

declare function require(name:string);
var sampleModule = require('modulename');

मेरे सिस्टम पर, यह ठीक संकलित करता है।


23
धन्यवाद। यह घोषित नहीं किए गए सभी कार्यों के लिए काम करेगा। बेहतर समाधान जो मैंने पाया है वह टाइपस्क्रिप्ट नमूनों से नोड.d.ts प्राप्त करना और इसे संदर्भित करना है। आपके पास सब कुछ है। वहाँ express.d.ts भी है।
Zdenek Sejcek

2
मुझे लगता है कि आप यह भी कर सकते हैंimport sampleModule = module('modulename')
एम पी

हाँ, लेकिन node.d.ts वर्तमान में है v0.8.8। @Valentin द्वारा दृष्टिकोण का उपयोग करने के लिए बेहतर है और फिर WebStorm IDE का उपयोग करें जो आपके द्वारा चलाए जा रहे नोड के संस्करण के लिए परिभाषाओं को डाउनलोड कर सकता है और आपको उस पर स्वतः पूर्ण आदि दे सकता है।
राडेक

@ रोड आप ऐसा कैसे करते हैं? मैं वेबस्टॉर्म 7.0.2 का उपयोग करता हूं (नवीनतम) Btw मुझे स्क्रिप्ट नोड नहीं मिल रहा है। यह कहां स्थित है? धन्यवाद।
वडकोरक्वेस्ट

1
@Vadorequest को इसकी मदद करनी चाहिए: jetbrains.com/webstorm/webhelp/…
Radek

62

सही सिंटैक्स है:

import sampleModule = require('modulename');

या

import * as sampleModule from 'modulename';

फिर अपने टाइपस्क्रिप्ट को संकलित करें --module commonjs

यदि पैकेज एक index.d.tsफ़ाइल के साथ नहीं आता है और इसके package.jsonपास कोई "typings"संपत्ति नहीं है , तो tscयह छाल देगा कि यह नहीं जानता कि क्या 'modulename'संदर्भित करता है। इस उद्देश्य के लिए आपको http://definitelytyped.org/.d.ts पर इसके लिए एक फ़ाइल खोजने की आवश्यकता है , या एक स्वयं लिखें।

यदि आप Node.js के लिए कोड लिख रहे हैं, तो आप http://definitelytyped.org/node.d.ts से भी फ़ाइल चाहेंगे ।


मैंने "scriptjs 'से $ s के रूप में" आयात * "का उपयोग करते हुए इस दृष्टिकोण का अनुसरण किया; चूंकि मैं टाइपस्क्रिप्ट का उपयोग कर रहा हूं। CKEDITOR.replace () कमांड निष्पादित होता है, और मुझे इसमें से एक मान्य DOM तत्व जैसा दिखता है, हालांकि ब्राउज़र में कुछ भी नहीं बदलता है (अभी भी एक textarea) और मेरा editor.on ('contentDom', ...) कॉलबैक ($ s कॉलबैक के अंदर भी इंस्टॉल किया गया) कभी भी कॉल न करें। किसी भी विचार क्या है?
वर्न जेन्सेन

43

सबसे अच्छा उपाय है कि नोड की प्रकार परिभाषाओं की एक प्रति प्राप्त करें। यह न केवल निर्भरता के सभी प्रकार के मुद्दों को हल करेगा require()। यह पहले जैसे पैकेज का उपयोग करके किया गया था typings, लेकिन जैसा कि माइक चैंबरलेन ने उल्लेख किया है, टाइपिंग पदावनत है। आधुनिक तरीका इसे इस तरह से कर रहा है:

npm install --save-dev @types/node

यह न केवल संकलक त्रुटि को ठीक करेगा, यह आपके आईडीई में नोड एपीआई की परिभाषा भी जोड़ देगा।


1
यह मेरे लिए भी काम किया! लेकिन जो मुझे समझ में नहीं आता है कि मैंने इसे विश्व स्तर पर स्थापित किया है (यानी:) npm install -g @types/nodeलेकिन यह काम नहीं किया?
जेच

क्या होगा यदि प्रकार मॉड्यूल npm में उपलब्ध नहीं है?
सुदर्शन नायर

@SudharshanNair निश्चित रूप से निश्चित परियोजना द्वारा परिभाषित कई प्रकार हैं। अन्य विकल्पों में निश्चित रूप से टाइप करने की घोषणा करना शामिल है, जो आपके स्वयं के प्रोजेक्ट के भीतर हैं, या बिना टाइप डीफ़ के उपयोग करना,
rharriso

3

टाइपस्क्रिप्ट से नोड कार्यों तक पहुंचने के लिए टाइपिंग का उपयोग करें:

typings install env~node --global

यदि आपके पास टाइपिंग नहीं है तो इसे स्थापित करें:

npm install typings --global

20
ध्यान दिया जाना चाहिए कि टाइपिंग बस के पक्ष में पदावनत हैnpm install @types/node --save-dev
माइक चैंबरलेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.