2016-09-09 8 views
0

前の例はthis oneでした。現在のものはOverview/reachbz.ts(3,28): error TS2306: File 'typings/immutable-3.8.1.d.ts' is not a module.typescriptのamdモジュールはどのように動作し、なぜエラーが発生するのですか

です。どのようにamdモジュールがtypescriptで動作するのか説明できますか?タイプコピーのページの情報を読んだ後、私はまだそれがどのように動作し、何がうまくいかないのか理解できません。

私は、エラーを再現するためにGitのレポを持っている:要求されたとして

git clone https://github.com/amsterdamharu/typescriptHorrors.git 

` 。ここでのファイルは、以下のとおりです。

///<reference path="../typings/immutable-3.8.1.d.ts" /> 
import Immutable = require("typings/immutable-3.8.1");//error here 
console.log("Immutable:",Immutable); 

/typings/immutable-3.8.1.d.tsここ:https://github.com/facebook/immutable-js/blob/master/type-definitions/Immutable.d.ts

tsconfig.json:(vscode用)

{ 
    "compilerOptions": { 
     "target": "es5", 
     "watch": false, 
     "module": "amd", 
     "removeComments": true, 
     "sourceMap": false, 
     "outDir": ".", 
     "rootDir": "." 
    } 
} 

task.json

{ 
    "version": "0.1.0", 
    "command": "tsc.cmd", 
    "isShellCommand": true, 
    "showOutput": "always", 
    "problemMatcher": "$tsc" 
} 

これはWindowsマシン上で実行されますが、同じエラーでLinux上で自宅で試しました。 TSCノードを使用して:

[[email protected] ts]$ tsc 
Overview/reachbz.ts(4,28): error TS2306: File 'typings/immutable-3.8.1.d.ts' is not a module. 

コードをコンパイルし、requirejsで動作しますが、エラーはこれを出版から私を防ぎます。

それは私が本当に理解していない別のものです。 Typescriptはオプションで介入しているはずですが、Visual Studioではプロジェクトを公開できないように、警告(コンパイル後に有効なスクリプトを生成する)が必要なものをエラーにエスカレートします。

[UPDATE]

定義ファイルの内容を変更すると:

export var whatever 

は、エラーが離れて行くします。

しかし、以下の内容は、エラーが

declare module Immutable {} 

declare module "immutable" { 
    export = Immutable 
} 

戻ってくることになりますがGitのレポをコンパイルすることができます誰もがありますか?これは、元不変のGitのレポ定義ファイルを使用していますが、私はそれはあなたのコードではバージョン1.8.10

+2

それはで見つけることができたとしても、この問題の関連するコードや情報を記載してください:あなたが必要として渡された文字列を変更

declare module "reverseEngineerInsteadOfDocumented" { export = Immutable; } 

作品:

に定義ファイルを変更しますあなたがリンクしたもう一つのスレッド。 –

+0

@NitzanTomer要求に応じていくつかのコンテンツを追加しました。私は誰もがエラーなしでこれをコンパイルできるのだろうかと思います。型定義に何か問題があるようです。 – HMR

答えて

2

TSCノードで動作するように取得することはできません。

import Immutable = require("typings/immutable-3.8.1");//error here 

はノーノー絶対です。

最初に:immutableのタイプ定義をダウンロードする必要はありません。彼らは不変のjsと来る。

二次:requireタイプスクリプトの定義。あなたは実際に実際に実行時のものが必要です。あなたの場合はimmutableなので、import Immutable = require('immutable')です。

もっと

周囲の定義はJavaScriptのランタイム輸入に一致するように設計されています。そのため、タイコスクリプトの定義を(たとえばtsconfig.jsonを使用するなどして)コンパイルコンテキストに入れてから、JavaScriptを書くだけです。多く:https://basarat.gitbooks.io/typescript/content/docs/project/modules.html

0

私は推測する定義ファイルtypescriptですの内容に基づいて、あなたが必要とするパス文字列を解決するために、異なる規則を使用しています。この場合、定義は持っているので:私は、文字列「不変」とname of the definition fileは関係ないと要求する必要がある

declare module "immutable" { 
    export = Immutable; 
} 

import Immutable = require("reverseEngineerInsteadOfDocumented"); 
関連する問題