2016-02-29 26 views
29

मैं Express/Node.js के साथ टाइपस्क्रिप्ट का उपयोग कर रहा हूं।टाइपस्क्रिप्ट आयात/बनाम आयात/आवश्यकता के रूप में?

import express = require('express');

लेकिन भी typescript.d.ts फ़ाइल दिखाता है::

लेने वाली मॉड्यूल के लिए, टाइपप्रति हैंडबुक निम्न सिंटैक्स से पता चलता

import * as express from "express";

मैं भी MSDN ब्लॉग खोज की, लेकिन नहीं कर सका कुछ भी पता लगाएँ।

2016 के आरंभ में कौन सा सही है? दोनों के बीच मतभेद क्या हैं, अगर कोई है?

उपयोग करने के लिए नवीनतम वाक्यविन्यास पर जानकारी खोजने का सबसे अच्छा स्रोत कहां है, इसलिए मैं भविष्य में यह जानकारी पा सकता हूं?

+2

मुझे नहीं पता कि सबसे अच्छा क्या है, लेकिन यह बहुत अच्छा है https://github.com/Microsoft/TypeScript/wiki/What's- new-in- टाइपस्क्रिप्ट –

उत्तर

55

ये अधिकतर समकक्ष हैं, लेकिन import * में कुछ प्रतिबंध हैं जो import ... = require नहीं है।

import * as एक पहचानकर्ता एक मॉड्यूल वस्तु, वस्तु पर जोर है कि पैदा करता है। ES6 spec के अनुसार, यह ऑब्जेक्ट कभी कॉल करने योग्य नहीं है या new सक्षम है - इसमें केवल गुण हैं। आप एक समारोह या वर्ग आयात करने के लिए कोशिश कर रहे हैं, तो आप (अपने मॉड्यूल लोडर पर निर्भर करता है)

import express from 'express'; 

import * as express उपयोग करने के लिए प्रयास कर रहा है और उसके बाद लागू express() के अनुसार हमेशा गैर कानूनी है

import express = require('express'); 

या का उपयोग करना चाहिए ES6 spec। कुछ रनटाइम + ट्रांसलेशन वातावरण में यह किसी भी तरह से काम करने के लिए हो सकता है, लेकिन भविष्य में किसी भी बिंदु पर चेतावनी के बिना तोड़ सकता है, जो आपको दुखी कर देगा।

+3

"सामान्य रूप से आपको ES6 वाक्यविन्यास का उपयोग करना चाहिए जब तक कि आप इसका कोई कारण नहीं है (मैं किसी भी ऑफहैंड के बारे में नहीं सोच सकता) "एफडब्ल्यूआईडब्ल्यू I [एक जवाब दिया क्यों नहीं] [http://stackoverflow.com/a/29598404/252087) [इस डुप्लिकेट प्रश्न में] [http: //stackoverflow.com/questions/29596714/new-es6-syntax-for-importing-commonjs-amd-modules-ie-import-foo-require)। –

+0

मैं यहां स्पष्ट विरोधाभास के बीच थोड़ा उलझन में हूं। मुझे किस सलाह का पालन करना चाहिए? @CSnover आपकी सलाह अभी भी 2016 में लागू है जैसा कि आपने इसे पोस्ट किया था? धन्यवाद। –

+1

@AdamTompson हाँ, "2016 अपडेट" भाग देखें। –

3
import * as express from "express"; 

यह ऐसा करने का सुझाया गया तरीका है क्योंकि यह पिछले वर्ष से जावास्क्रिप्ट (ES6/2015) के लिए मानक है।

किसी भी मामले में, अपनी tsconfig.json फ़ाइल में, आपको मॉड्यूल विकल्प को सामान्यज को लक्षित करना चाहिए जो कि नोडजेस द्वारा समर्थित प्रारूप है।

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