2015-12-29 6 views
5

मैं अपने नोड प्रोजेक्ट में टाइपस्क्रिप्ट के साथ काम करने की कोशिश कर रहा हूं लेकिन इसके साथ कुछ समस्याएं हैं।नोडजेएस + टाइपस्क्रिप्ट: टाइप स्क्रिप्ट संकलित कोड के साथ अस्पष्ट वाक्यविन्यास

यह मेरा index.ts फ़ाइल है:

import express from 'express'; 

const app = express(); 

मैं चल रहा हूँ:

tsc --module commonsjs -d index.ts 

मेरे उत्पादन index.js है:

var express_1 = require('express'); 
var app = express_1["default"](); 

जहां इस ["default"] किया आया से? यह ठीक से चलाने के लिए नहीं मेरी कोड बना रही है:

var app = express_1["default"](); 
          ^

TypeError: express_1.default is not a function 

जहां तक ​​मैं समझता हूँ कि मैं "डिफ़ॉल्ट" कोष्ठक के बिना कोड प्राप्त होनी चाहिए और यह ठीक काम किया है | - मैं कोष्ठक को हटाने की कोशिश की और यह काम किया।

मुझे यहां क्या याद आ रही है?

उत्तर

5

सबसे सुरक्षित समाधान होगा:

var express = require('express'); 

आधिकारिक दस्तावेज आयात के लिए आवश्यकता होती है घोषणाओं पाया जा सकता है here:

import express = require('express'); 

यह करने के लिए transpiles।

मेरा मानना ​​है कि टाइपस्क्रिप्ट को आपके अनुच्छेद here से निर्णय लेने के लिए उपरोक्त कोड के रूप में कार्य करने के लिए "डिफ़ॉल्ट" नामक निर्यात की अपेक्षा है।


साइड ध्यान दें, (लेखन के समय [email protected]) टाइपप्रति के नवीनतम संस्करण की तरह लग रहा एक संकलन प्रयास जो एक लापता डिफ़ॉल्ट उपयोग करने का प्रयास करेंगे पर एक चेतावनी फेंक देगा:

index.ts(1,8): error TS1192: Module '"express"' has no default export. 

साइड नोट 2, माइक्रोसॉफ्ट से एक उदाहरण import * as express from 'express'; सिंटैक्स का उपयोग here पाया जा सकता है। इस उदाहरण में commonjs (they are के रूप में) के मॉड्यूल को लक्षित करते समय, यह var express = require('express'); पर भी पारदर्शी हो जाएगा।

+1

'आयात *' विरासत मॉड्यूल आयात करने का गलत तरीका है। Http://stackoverflow.com/a/29598404/252087 देखें। –

2

यदि आप एक्सप्रेस जैसे गैर-ईएस 6 मॉड्यूल के डिफ़ॉल्ट निर्यात का उपयोग करने का प्रयास कर रहे हैं, तो आपको विरासत आयात वाक्यविन्यास import express = require('express') का उपयोग करने की आवश्यकता है। ईएस 6 मॉड्यूल में, कोई डिफ़ॉल्ट मान निर्यात नहीं है जैसे module.exports Node.js मॉड्यूल या return एएमडी मॉड्यूल के; ईएस 6 मॉड्यूल का डिफ़ॉल्ट निर्यात सिर्फ default कुंजी है। यही कारण है कि, जब आप एक ईएस 6 डिफ़ॉल्ट import का उपयोग करने का प्रयास कर रहे हैं, तो टाइपस्क्रिप्ट default संपत्ति तक पहुंच के साथ जावास्क्रिप्ट उत्पन्न करता है।

इसके बारे में अधिक जानकारी New es6 syntax for importing commonjs/amd modules i.e. `import foo = require('foo')` पर उपलब्ध है।

+0

धन्यवाद! मेरे विषय पर आपके पास कुछ शोध था। – Shikloshi

+0

मुझे समझ में नहीं आता कि आपने दूसरे उत्तर को सही उत्तर के रूप में स्वीकार क्यों किया। यह गलत जवाब है। –

+0

यदि यह वास्तव में टाइपस्क्रिप्ट के वर्तमान संस्करण के लिए गलत उत्तर है, तो मेरा सुझाव है कि आपने माइक्रोसॉफ्ट को उनके उदाहरण संपादित किए हैं। – dvlsg

संबंधित मुद्दे