2016-01-05 10 views
6

मैं es6 मॉड्यूल सिंटैक्स का उपयोग करके एक चर को पुन: निर्यात करने का प्रयास कर रहा हूं, फिर इसे बदलें और अंतिम आयात में दिखाई देने वाला परिवर्तन देखें। लेकिन यह उम्मीद के रूप में काम नहीं कर रहा है। नीचे दिए गए उदाहरण देखें:टाइपस्क्रिप्ट es6 मॉड्यूल पुन: निर्यात म्यूटेबल वेरिएबल बाध्यकारी

a.ts

export var a = 1; 
export function changeA() { a = 2; } 

b.ts

export * from './a'; 

c.ts

import { a, changeA } from './b'; 
console.log(a); // 1 
changeA(); 
console.log(a); // Expected 2 but get 1 

tsconfig.json

{ 
    "compilerOptions": { 
    "target": "es5", 
    "module": "commonjs", 
    "outDir": "out" 
    } 
} 

रन के परिणाम:

$ node out/c.js 
1 
1 

मैं अंतिम console.log आदेश अद्यतन को प्रतिबिंबित करने में 2 मुद्रित करने के लिए उम्मीद है, लेकिन ऐसा नहीं है। हालांकि, अगर मैं बैबेल के साथ एक ही उदाहरण संकलित करता हूं तो यह काम करता है। क्या म्यूटेबल वैरिएबल बाइंडिंग को फिर से निर्यात करना टाइपस्क्रिप्ट के साथ काम नहीं करता है या क्या मैं कुछ गलत कर रहा हूं?

उत्तर

4

यह इसलिए क्योंकि b.ts:

को
export * from './a'; 

transpiles

function __export(m) { 
    for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p]; 
} 
__export(require('./a')); 

और चर a का मूल्य कॉपी किया जाता है और न संदर्भित किया है।

आप इस तरह से चारों ओर यह काम कर सकते हैं:

a.ts:

export var a = 1; 
export var deeper = { 
    a: 1 
}; 
export function changeA() { 
    a = 2; 
    deeper.a = 2; 
} 

b.ts:

export * from './a'; 

c.ts:

import { a, deeper, changeA } from './b'; 
console.log(a); // 1 
changeA(); 
console.log(a); // Expected 2 but get 1 
console.log(deeper.a); // prints 2 as expected 
+1

क्या इसका मतलब यह है कि टाइपस्क्रिप्ट ईएस 6 मॉड्यूल सिंटैक्स का पूरी तरह से समर्थन नहीं करता है? काम करना चारों ओर अच्छा है लेकिन मैं चर को उपसर्ग करना पसंद नहीं करूंगा। लेकिन अगर यह काम करने का एकमात्र तरीका है तो मुझे लगता है कि मेरे पास कोई विकल्प नहीं है। –

+0

[इस] के अनुसार [https://github.com/Microsoft/TypeScript/issues/1215#issuecomment-168963929) यह उत्पन्न हो सकता है अगर जेनरेट कोड es5 विशिष्ट था, जो मुझे लगता है कि यह लक्ष्य निर्धारित करने के बाद से हो सकता है = es5। –

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