2016-02-14 2 views
5

में मॉड्यूल.एक्सपोर्ट = का उपयोग करने वाले कॉमनजेएस मॉड्यूल को आयात करने के लिए निम्नलिखित निम्नलिखित मान्य, काम कर रहे ईएस 5 का उत्पादन करते हैं लेकिन नीचे दी गई त्रुटि को उत्सर्जित करते हैं। मैं टाइपस्क्रिप्ट 1.7.5 का उपयोग कर रहा हूं और मुझे लगता है कि मैंने पूरी भाषा की कल्पना पढ़ी है और मुझे पता नहीं लगा कि यह त्रुटि क्यों उत्पन्न होती है।टाइपजेस्क्रिप्ट

error TS2349: Cannot invoke an expression whose type lacks a call signature. 

a.js (डिफ़ॉल्ट निर्यात के साथ ES5 परिवेश मॉड्यूल)

function myfunc() { 
    return "hello"; 
} 
module.exports = myfunc; 

a.d.ts

declare module "test" { 
    export default function(): string; 
} 

b.ts

import test = require("test"); 
const app = test(); 

b.js (उत्पन्न ES5):

var test = require("test"); 
var app = test() 
+0

क्या लाइन पर इस त्रुटि है? Test12ts के –

+0

लाइन 2। परीक्षण() – drewlio

+0

बीटीडब्लू, बहुत भ्रमित है कि आपकी पोस्ट आपकी सभी तीन फाइलों के लिए बेस नाम "टेस्ट" का उपयोग करती है। तीसरी फ़ाइल, जो "./test" आयात करती है और इसे "test.ts" कहा जाता है, निश्चित रूप से वास्तव में कुछ और है। :) –

उत्तर

5

module.exports एक CommonJS मॉड्यूल में एक शाब्दिक मूल्य का निर्यात करता है, लेकिन export default कहते हैं कि आप एक default संपत्ति है, जो नहीं है निर्यात कर रहे हैं कि आपके जावास्क्रिप्ट कोड वास्तव में करता है।

इस मामले में सही निर्यात वाक्य रचना बस export = myfunc है:

declare module "test" { 
    function myfunc(): string; 
    export = myfunc; 
} 
+0

यह काम करता है। धन्यवाद। मुझे लगता है कि टाइपस्क्रिप्ट spec वास्तव में मुझे यहाँ भटक गया। निर्यात असाइनमेंट के संबंध में यह कहता है, "टाइपस्क्रिप्ट के पुराने संस्करणों के साथ पिछड़ा संगतता के लिए निर्यात असाइनमेंट मौजूद हैं।" ([संदर्भ] (https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#1135-export-assignments)), जिसका अर्थ है कि यह पुराना तरीका है और आपको नए कोड में निर्यात असाइनमेंट का उपयोग नहीं करना चाहिए । [यह उत्तर] (http://stackoverflow.com/questions/34622598/typescript-importing-from- पुस्तकालय-written-in-es5-vs-es6) निकटता से संबंधित है। – drewlio

+0

इसके अलावा, भविष्य के पाठक के लिए, ईएस 5 में 'module.exports =' ** ** ** "डिफ़ॉल्ट निर्यात" नहीं है, जो एक ईएस 6 शब्द है। टाइपस्क्रिप्ट स्पेक 'डिफ़ॉल्ट' इकाई [यहां] (https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#11342-export-default-declarations) बताता है। – drewlio

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

  • कोई संबंधित समस्या नहीं^_^