2016-12-19 12 views
13

मैं एक कोणमापक परियोजना जो इस तरह के एक फ़ाइल में है:टाइपस्क्रिप्ट फ़ाइल में जेएस-मॉड्यूल कैसे आयात करें?

फाइल करने के लिए
var FriendCard = function (card) { 
    var webElement = card; 
    var menuButton; 
    var serialNumber; 

    this.getAsWebElement = function() { 
     return webElement; 
    }; 

    this.clickMenuButton = function() { 
     menuButton.click(); 
    }; 

    this.setSerialNumber = function (numberOfElements) { 
     serialNumber = numberOfElements + 1; 
     menuButton = element(by.xpath('.//*[@id=\'mCSB_2_container\']/li[' + serialNumber + ']/ng-include/div/div[2]/i')); 
    }; 

    this.deleteFriend = function() { 
     element(by.css('[ng-click="deleteFriend(person);"]')).click(); 
     element(by.css('[ng-click="confirm()"]')).click(); 
    } 
}; 
module.exports = FriendCard; 

पथ है

./pages/FriendCard.js

मैं कोई समस्या नहीं यह है whith का उपयोग कर किसी अन्य फ़ाइल में आयात करें() विधि:

var FriendCard = require('./../pages/FriendCard'); 

तो, मैं टाइपप्रति फ़ाइल बस ऐसे ही करने के लिए इस फ़ाइल को आयात करने के लिए तय कर लिया है: मैं WebStorm उपयोग कर रहा हूँ

import {FriendCard} from './../pages/FriendCard' 

, तो यह मुझसे कहता है, कि (TS2305) यह कोई निर्यात सदस्य है 'FriendCard'।

शायद मुझे किसी भी तरह tsconfig.json फ़ाइल को कॉन्फ़िगर करना होगा, लेकिन मुझे अभी भी पता नहीं है कि यह कैसे काम करता है। क्या तुम मेरी मदद कर सकते हो?

+0

* "मैं वेबस्टॉर्म का उपयोग कर रहा हूं, इसलिए यह मुझे बताता है कि (टीएस 2305) में इसका कोई निर्यात सदस्य 'फ्रेंडकार्ड' नहीं है।" * बस एक छोटा नोट - 'टीएस 2305' का अर्थ है कि चेतावनी/त्रुटि वास्तविक रूप से उत्पादित होती है टाइपस्क्रिप्ट कंपाइलर/भाषा सेवा और वास्तविक वेबस्टॉर्म नहीं .. क्योंकि आईडीई अपने स्वयं के निरीक्षण/पार्सर्स में ऐसी संख्या का उपयोग नहीं करता है। – LazyOne

उत्तर

21

आप इस प्रकार पूरे मॉड्यूल आयात कर सकते हैं:

import * as FriendCard from './../pages/FriendCard'; 

अधिक जानकारी के लिए टाइपप्रति आधिकारिक दस्तावेज़ों की modules अनुभाग देखें।

+0

वास्तविक सापेक्ष पथ के सामने "./" articulating के लिए धन्यवाद।यह संकलन समय पर पथ संकल्प में सभी अंतर बनाता है। – Roman

2

अपने दूसरे बयान

import {FriendCard} from './../pages/FriendCard' 

आप फ़ाइल './pages/FriendCard'

आपका FriendCard फ़ाइल एक चर और उस चर निर्यात किया जाता है से FriendCard वर्ग आयात करने के लिए कह रहे हैं टाइपप्रति में अज्ञात फ़ंक्शन का संदर्भ दे रहा है।

आपके पास दो विकल्प हैं। यदि आप इसे टाइप किए गए तरीके से करना चाहते हैं तो आप टाइप करने के लिए अपने मॉड्यूल को दोबारा कर सकते हैं (विकल्प 1) या आप अनाम फ़ंक्शन आयात कर सकते हैं और एक dts फ़ाइल जोड़ सकते हैं। अधिक जानकारी के लिए https://github.com/Microsoft/TypeScript/issues/3019 देखें। इस बारे में आपको फ़ाइल जोड़ने की आवश्यकता क्यों है।

विकल्प 1

Refactor मित्र कार्ड js फ़ाइल लिखा जाता है।

export class FriendCard { 
webElement: any; 
menuButton: any; 
serialNumber: any; 

constructor(card) { 
    this.webElement = card; 
    this.menuButton; 
    this.serialNumber; 
} 



getAsWebElement = function() { 
    return this.webElement; 
}; 

clickMenuButton = function() { 
    this.menuButton.click(); 
}; 

setSerialNumber = function (numberOfElements) { 
    this.serialNumber = numberOfElements + 1; 
    this.menuButton = element(by.xpath('.//*[@id=\'mCSB_2_container\']/li[' + serialNumber + ']/ng-include/div/div[2]/i')); 
}; 

deleteFriend = function() { 
    element(by.css('[ng-click="deleteFriend(person);"]')).click(); 
    element(by.css('[ng-click="confirm()"]')).click(); 
} 
}; 

विकल्प 2

आप गुमनाम समारोह

import * as FriendCard from module("./FriendCardJs"); 

आयात कर सकते हैं वहाँ एक d.ts फ़ाइल परिभाषा के लिए कुछ विकल्प हैं। इस उत्तर सबसे अधिक पूर्ण हो रहा है: How do you produce a .d.ts "typings" definition file from an existing JavaScript library?

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