紛らわしい「識別子の重複」Typescriptエラーメッセージ


224

なぜこれとこの種類の多くのエラーが発生するのですか?リポジトリへのリンクと以下の主要なコードスニペットを追加しています。依存関係と "include"チェーンがどのように機能するかについて、基本的な誤解があると思います。

csvproc(master)> tsc
node_modules/typescript/bin/lib.core.d.ts(83,5): error TS2300: Duplicate identifier 'configurable'.
node_modules/typescript/bin/lib.core.d.ts(84,5): error TS2300: Duplicate identifier 'enumerable'.
node_modules/typescript/bin/lib.core.d.ts(85,5): error TS2300: Duplicate identifier 'value'.
node_modules/typescript/bin/lib.core.d.ts(86,5): error TS2300: Duplicate identifier 'writable'.

すべてのコードはここにあります。

私のtsconfig.json:

{
    "compilerOptions": {
        "module": "commonjs",
        "noImplicitAny": false,
        "outDir": "built/",
        "sourceMap": true,
        "target": "es5"
    }
}

私のtsd.json:

{
  "version": "v4",
  "repo": "borisyankov/DefinitelyTyped",
  "ref": "master",
  "path": "typings",
  "bundle": "typings/tsd.d.ts",
  "installed": {
    "node/node-0.10.d.ts": {
      "commit": "6387999eb899d0ba02d37dd8697647718caca230"
    },
    "should/should.d.ts": {
      "commit": "e1182d56ccb192379eade6055d9ba3fb6a0bacc4"
    }
  }
}

私のtsd.d.ts:

{
  "version": "v4",
  "repo": "borisyankov/DefinitelyTyped",
  "ref": "master",
  "path": "typings",
  "bundle": "typings/tsd.d.ts",
  "installed": {
    "node/node-0.10.d.ts": {
      "commit": "6387999eb899d0ba02d37dd8697647718caca230"
    },
    "should/should.d.ts": {
      "commit": "e1182d56ccb192379eade6055d9ba3fb6a0bacc4"
    }
  }
}

あなたはtsd.d.tsおそらくJSONファイルではなく、いくつかの参照タグのように見えます。
— yangmillstheory 2016年

1
typings.jsonAND が必要なのはなぜtsd.d.tsですか?
— CodyBugstein

解決策をここに置いてみました。stackoverflow.com/questions/40404353/...
— hüseyint

回答:


126

これは、次の2つの要素が組み合わされているためです。

  • tsconfigfilesセクションがありません。http://www.typescriptlang.org/docs/handbook/tsconfig-json.htmlから

    tsconfig.jsonに「files」プロパティが存在しない場合、コンパイラはデフォルトで、含まれているディレクトリとサブディレクトリ内のすべてのファイルを含めます。「files」プロパティを指定すると、それらのファイルのみが含まれます。

  • typescriptnpm依存関係として含める:node_modules/typescript/これは、すべてtypescriptが含まれることを意味します....暗黙的にlib.d.tsプロジェクトに暗黙的に含まれています(http://basarat.gitbook.io/typescript/content/docs/types/lib.d.ts .html)と、NPMバージョンのtypescriptに同梱されているものとの競合。

修正

リストfilesまたはinclude明示的にhttps://basarat.gitbook.io/typescript/docs/project/files.html html


7
または代わりにグローバルにtypescriptをインストールしますか?
— Ryan Cavanaugh、2015

2
ええ、なぜそこにローカルにあるのかわかりません:)私はおそらく彼がそこからいくつかのAPIを必要としていると思いました(後から...ありそうもないことです)
— basarat

RyanCavanaughはい、それが問題でした。@basaratはまだ洗練されていないので、ローカルでもグローバルでも見落としでした。または私の弁護では、私の出身であるルビの世界でそれを行うことは物事に害を及ぼさないので、それが私の文脈でした:)それでもあなたの応答に追加した情報は私のために絵を完成させ続けています。ほんとありがと。二人とも!
— ピトサラス2015

5
excludeプロパティを使用
— バサラト2015年

6
Githubリンクが壊れている
— Denny、

70

更新:タイピングのバージョン1.0は出力構造を変更し、以下の回答は1.0より前のバージョンに関連しています。

タイピングを使用してtsconfig.jsonで除外している場合、重複するタイプの問題に遭遇し、次のようなものが必要になる場合があります。

{
  "exclude": [
    "typings/browser.d.ts",
    "typings/browser",
    "node_modules"
  ]
}

TypeScriptとの統合を簡略化するために、プロジェクトにインストールされているすべてのタイピングを参照する2つのファイル(typings / main.d.tsとtypings / browser.d.ts)が生成され、一度に1つしか使用できません。

したがって、必要なバージョンに応じて、「ブラウザ」または「メイン」タイプのファイルを除外(またはインクルード)する必要がありますが、両方ではありません。これが重複の原因となっているためです。

このタイピングの問題では、それについて詳しく説明しています。


恐ろしい男、これを含むから重複識別子エラーで問題を解決タイピング :)プロジェクト内
— magicode118

「タイピング」を除外しないのはなぜですか?タイピングは開発時のみであり、実行時ではありませんか?
— Eric Hartford

これは、コンパイル時に型を見つける場所を定義しています。「タイピング」を除外すると、タイプを見つけることができなくなります。ここで問題となるのは、コンパイルしようとしていることと、型が重複していることです。TypeScriptはランタイムではなく、コードをJavaScriptに変換します。
— RationalDevはGoFundMonicaを2016年

2
VS2017で私は.NETCore2 MVCのアプリで「ビン」、「OBJ」を除外しなければならなかった
— OSP

これについては、OSPと同じ問題がありました。objフォルダーにはTypeScriptファイルが含まれていたため、重複して表示されていました。毎回最初にビルドしたときに問題が発生し、ビルドタイプを変更すると、ビルドするたびに問題が発生し続けました。
— グルンゴンドーラ2018

24

タイピングフォルダの下にタイピングを個別にインストールした場合

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

2
ああそう-私の除外にタイピングを追加すると私のバグが修正されました。
— cport1 2016年

1
/ objの下にもコピーがあったため、「Typescript Virtual Projects」からのエラーが発生しました。除外するために「obj」を追加すると、修正されます。
— Jon

これは私のビルドを完全に破壊し、タイピングが欠落しています。
— Spenhouet

21

問題は単純に解決されました:

  1. node_modulesフォルダを削除する
  2. npm install正しいバージョンのすべてのパッケージを取得するために実行しています

私の場合、Gitブランチを変更した後に問題が発生しました。新しいブランチが異なるノードモジュールのセットを使用していました。古いブランチはTypeScript v1.8を使用し、新しいブランチはv2.0を使用していました


1
これは私にとってはうまくいきました。最初はnode_modulesを削除できませんでした。削除するには管理者アクセス権が必要と表示されているためです。私のユーザーアカウントには管理者アクセス権があります。本当の問題は、フォルダーを使用していたプログラムを閉じる必要があることでした。
— ドリュー

15

私はこの問題に遭遇しました。を実行したときにnpm start、重複した識別子エラーが多数発生しました。

解決:

プロジェクトのルートフォルダーから以下を実行します。

rm -r typings
typings install
npm start

そして、すべてが正常に動作します。


私にとっては、ポリフィルのes6-shim使用から使用に切り替えcore-jsていましたが、これがうまくいった解決策です。あまり手間のかからないアプローチはを使用することtypings pruneです。
— StriplingWarrior 2016年

私のために働く。しかし、「typings install」の代わりに「npm install」があるはずだと思います
— Ihor Khomiak

私にはtypingsフォルダがありません:(
— Jamie Hutber

12

次のように、tsconfig.jsonファイルでexcludeオプションを使用することもできます。

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "declaration": false,
    "noImplicitAny": false,
    "removeComments": true,
    "noLib": false,
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true
  },
  "exclude": [
    "node_modules"
  ]
}

4
私はこれとまったく同じ問題を抱えています。この修正は機能しません。Typescrip 1.75を使用しています。Typescript Githubリポジトリに問題を投稿しました。
— Bart

1
TSDではなくタイピングを使用している場合は、@ RationalDevによって提案されたソリューションを使用する必要があります
— thitemple

4

私の場合、私はエラーを受け取りました

node_modules/@types/es6-promise/index.d.ts(11,15):error TS2300:Duplicate identifier 'Promise'。

そして、私は@types/es6-promise私のpackage.json を持っていましたが、私tsconfigはすでにtarget: "es6"でした。そのためPromise、コンパイル時に競合があったと思います。

ファイル@types/es6-promiseから削除することでpackage.json問題は解決しました。


3

tsconfig.jsonとnode_modulesのファイルを除外して問題が解決した場合に備えて、webpackを使用して同じエラーに遭遇しました:.d.ts

"exclude": [
    "node_modules",
    "typings/main",
    "typings/main.d.ts",
    "typings/index.d.ts"
] 

Webpackでもこのエラーが発生しました。サーバーを再起動するだけで修正されました。
— クリント

1

この問題は、ディスク上に予期しないフォルダがあったために発生しました(jspm_packagesソース管理によって追跡されなかった(およびIDEから非表示にされた)使用されなくなった)TypeScriptが重複してインストールされていたため、問題が発生していました。

ちょっとしたケースですが、誰かがこの解決策を模索している場合に備えて、ここに答えを残します。


私に似ている。Visual Studio Codeでtypescriptファイルの名前を変更すると、IDEには表示されなくなった(孤立した).jsファイルが表示されますが、IDの重複エラーが表示されていました。
— DAG 2017

0

私はこの問題を抱えていましたが、私のプロジェクトに2番目のnode_modulesフォルダーがあり、そこにあるべきではなかったことがわかりました:-(


フォルダー内にnode_modulesがあるライブラリーがいくつかあります。ノード4.6.0を使用していたときに問題が発生することはありませんでしたが、ノード6.9.0を使用すると突然そのエラーがスローされます。
— heman123 2016年

この問題がどのバージョンから始まったのかと思います。ノード5.6.0で問題が発生しました。
— Bruno

0

tsconfig.jsonをtarget: "es2015"およびmodule: "es2015"に変更した後、他のエラーとともにこのエラーが発生しました。

/// <reference path="../../typings/index.d.ts" />main.tsファイルで使用されるベース(AngularJS2クイックスタート)。これを解決するには、その行を削除する必要がありました。


0

libフォルダーをwebサイトフォルダーから削除しました。これは、タイピングの以前のインストールによって作成されました。これは重複しました。これが削除されたとき、それは機能しました!


0

これは、ノードフォルダーに入力と依存関係の両方があることが原因である可能性があります。したがって、まず@typesフォルダーに何があるかを確認し、依存関係にある場合は重複を削除します。私にとってはそれはcore.jsでした


0

この@ types / express-validatorをpackage.jsonファイルから削除してから、npm installを実行します

続きを読む

作成者メッセージ:このパッケージは非推奨になりましたこれは、express-validator(https://github.com/ctavan/express-validator)のスタブタイプ定義です。express-validatorは独自の型定義を提供するため、@ types / express-validatorをインストールする必要はありません。



-2

私は同様の問題に遭遇しました。tsconfig.jsonをプロジェクトのルートから別のスコープに移動するだけで問題が解決しました。私のプロジェクトでは、tsconfig.jsonをルートからwwwrootに移動しました。


-2

ソリューションを完全に閉じてプロジェクトを再実行すると、問題が解決しました。


なぜ反対票を投じたのか分からない。回答を読んだ後、IntelliJで[キャッシュを無効にして再起動する]をクリックし、問題が解決されたので、ありがとうございます。
— ヨハネススタドラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.