2016-12-19 11 views
13

私はそのようなファイルが含まれている分度器プロジェクトを持っている:ファイルへjs-modulesをTypeScriptファイルにインポートするには?

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私は問題がありませんrequire()メソッドを使用して別のファイルにインポート:

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

だから、私はちょうどそのようtypescriptファイルにこのファイルをインポートすることにしました:

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

それは私に語ったように、私は(TS2305)それは、エクスポートメンバーを持っていないことを、WebStormを使用しています'フレンドカード'。

多分私はtsconfig.jsonファイルを何とか設定しなければならないかもしれませんが、それはどういう仕組みか分かりません。私たちを手伝ってくれますか?

+0

*「私はWebStormを使用しているので、(TS2305)エクスポートされたメンバ 'FriendCard'はありません」*わずかな注記 - 「TS2305」は、警告/エラーが実際のTypeScriptコンパイラ/言語サービスであり、実際のWebStormではなく、IDEは独自の検査/パーサーでこのようなナンバリングを使用しないためです。 – LazyOne

答えて

21

あなたは、全体のモジュールをインポートすることができます。

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

詳細については活字体公式ドキュメントのmodulesセクションを参照してください。

+0

実際の相対パスの前に "./"を明示してくれてありがとう。これにより、コンパイル時にパスの解像度に差が生じます。 – Roman

2
2番目の文で

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

あなたはファイルからFriendCard クラスをインポートするにはtypescriptですが言っている「./pages/FriendCard」

あなたFriendCardファイルは、変数とその変数をエクスポートしています匿名関数を参照しています。

ここには2つのオプションがあります。これを型付きの方法で実行したい場合は、モジュールをタイプする(オプション1)か、匿名関数をインポートしてd.tsファイルを追加することができます。詳細はhttps://github.com/Microsoft/TypeScript/issues/3019を参照してください。なぜあなたはファイルを追加する必要があるかについて。

オプション1

入力するためにフレンドカードの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

あなたはd.tsファイル定義のためのいくつかのオプションがあります

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

無名関数をインポートすることができます。この答えは、最も完全であると思われる次のようHow do you produce a .d.ts "typings" definition file from an existing JavaScript library?

関連する問題