2017-04-12 25 views
1

Node + ES6プロジェクトをTypeScriptに変換する処理中です。私はES6を目指しています(ノード7.xを実行しているので)、Mapを使用しています。これらが重複識別子であるか再宣言として、特に文脈では、タグ付けされている理由は明らかではないノード+ TypeScript:ブロックスコープの変数 'events'を再宣言できません

  • src/actions.ts(3,9): error TS2451: Cannot redeclare block-scoped variable 'events'
  • src/calendar.ts(5,10): error TS2300: Duplicate identifier 'fetchEvents'.
  • src/index.ts(3,5): error TS2403: Subsequent variable declarations must have the same type. Variable 'actions' must be of type 'Map<any, any>', but here has type 'any'.

tsc -pリターンを実行

ノードの必須/モジュールインポートのrequireステートメントの標準constを使用すると、これがさらに深刻になりました。

calendar.ts

const { rp } = require("request-promise") 

var events = <any> {} 

// both are exported via module.exports = { events, fetchEvents } 
function fetchEvents(key: string, url: string, options: object) { 
    ... 

actions.ts

const moment = require("moment") 
var { events, fetchEvents } = require("./calendar") 

var actions = new Map() 

tsconfig.json場合

{ 
    "compilerOptions": { 
    "target": "es6", 
    "outDir": "./built", 
    "declaration": true, 
    "rootDir": ".", 
    "baseUrl" : "./packages", 
    "experimentalDecorators": true, 
    "moduleResolution": "node", 
    "noImplicitAny": false, 
    "strictNullChecks": true, 
    "noImplicitReturns": true, 
    "noImplicitThis": true 
    }, 
    "include": [ 
    "src/**/*" 
    ], 
    "exclude": [ 
    "dist", 
    "node_modules", 
    ".vscode" 
    ] 
} 

答えて

1

わかりませんvar {...構成が有効です。 varは変数スコープをグローバルにします。

何をactions.tsで使用する場合:

const moment = require("moment") 
import calendar = require("./calendar"); 
// console.log(calendar.events) 

+0

これは、TypeScriptがインポート/名前空間を異なる方法で処理するように見えるため、これは機能します。私はこれに関する良い文書を見つけることができませんでしたが、 'module.exports = {events、fetchEvents}'を使用して、次に 'calendar'としてインポートすることができます。 – elithrar

関連する問題