web-dev-qa-db-ja.com

タイプによるTypeScriptコンパイルエラー

私はTypeScript 1.7.5を使用しており、0.6.9とangular 2.0.0-beta.0。

型定義ファイルによるTypeScriptコンパイルエラーメッセージDuplicate identifierを取り除くにはどうすればよいですか?

Duplicate identifierエラーは、次のディレクトリの定義ファイルで発生します。

node_modules/angular2/typings/es6-shim/es6-shim.d.ts
node_modules/angular2/typings/jasmine/jasmine.d.ts
node_modules/angular2/typings/zone/zone.d.ts
typings/browser/ambient/es6-promise/es6-promise.d.ts
typings/browser/ambient/es6-shim/es6-shim.d.ts
typings/browser/ambient/jasmine/jasmine.d.ts
typings/browser/ambient/karma/karma.d.ts
typings/browser/ambient/zone.js/zone.js.d.ts

node_modules/angular2で除外したので、コンパイラはtsconfig.jsonディレクトリで何をしていますか?

この質問をGitHubにも投稿しました

tsconfig.json

{
    "compilerOptions": {
        "target": "es5",
        "module": "system",
        "moduleResolution": "node",
        "sourceMap": true,
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "removeComments": false,
        "noImplicitAny": false
    },
    "exclude": [
        "node_modules",
        "typings/main",
        "typings/main.d.ts"
    ]
}

tsconfig.jsonexclude部分を変更すると、これらは消えます。

"exclude": [
    "node_modules",
    "typings"
]

しかし、以下を追加した後、同じDuplicate identifierコンパイルエラーが再び表示されます。

/// <reference path="../../typings/browser.d.ts" />

typings.json

{
  "name": "example-mean-app-client",
  "dependencies": {},
  "devDependencies": {},
  "ambientDependencies": {
    "bootstrap": "github:DefinitelyTyped/DefinitelyTyped/bootstrap/bootstrap.d.ts#4de74cb527395c13ba20b438c3a7a419ad931f1c",
    "es6-promise": "github:DefinitelyTyped/DefinitelyTyped/es6-promise/es6-promise.d.ts#830e8ebd9ef137d039d5c7ede24a421f08595f83",
    "es6-shim": "github:DefinitelyTyped/DefinitelyTyped/es6-shim/es6-shim.d.ts#4de74cb527395c13ba20b438c3a7a419ad931f1c",
    "jasmine": "github:DefinitelyTyped/DefinitelyTyped/jasmine/jasmine.d.ts#dd638012d63e069f2c99d06ef4dcc9616a943ee4",
    "karma": "github:DefinitelyTyped/DefinitelyTyped/karma/karma.d.ts#02dd2f323e1bcb8a823269f89e0909ec9e5e38b5",
    "karma-jasmine": "github:DefinitelyTyped/DefinitelyTyped/karma-jasmine/karma-jasmine.d.ts#661e01689612eeb784e931e4f5274d4ea5d588b7",
    "systemjs": "github:DefinitelyTyped/DefinitelyTyped/systemjs/systemjs.d.ts#83af898254689400de8fb6495c34119ae57ec3fe",
    "zone.js": "github:DefinitelyTyped/DefinitelyTyped/zone.js/zone.js.d.ts#9027703c0bd831319dcdf7f3169f7a468537f448"
  }
}
14
Herman Fransen

バサラがほのめかしているように、あなたはどちらかを変えることができます:

"moduleResolution": "node",

"moduleResolution": "classic",

または、単純にすべての重複する入力を入力フォルダから削除することもできます。何が起こっているかというと、コード内で実行するすべてのimportのnode_modulesフォルダーからすべての入力が自動的にインポートされるということです。また、browser.d.tsファイルの依存関係である入力をインポートしています。

3
rgvassar

私にとっては、「ブラウザ」または「メイン」のいずれかを選択し(アプリケーションに応じて:フロントエンドまたはバックエンド)、tsconfig.jsonのもう一方を除外すると機能しました。

  "exclude": [
    "node_modules",
    "wwwroot",
    "typings/main",
    "typings/main.d.ts"
  ]
4
fikkatra

Tsconfig.jsonで除外したので、node_modules/angular2ディレクトリでコンパイラは何をしていますか

"moduleResolution": "node",であるためnpmモジュールを参照しますが、インポートされるファイルはonlyです(除外しないとallファイルを参照します)。

3
basarat