"중복 식별자"를 혼동하는 Typescript 오류 메시지


224

왜 이런 종류의 오류가 더 많이 발생합니까? 아래의 키 코드 스 니펫뿐만 아니라 리포지토리에 대한 링크를 추가하고 있습니다. 종속성과 "포함"체인 작동 방식에 대한 기본적인 오해가 있다고 생각합니다.

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

1
typings.jsonAND가 필요 tsd.d.ts합니까?
CodyBugstein

나는 해결책을 여기에 넣었습니다. stackoverflow.com/questions/40404353/…
hüseyint

답변:


126

이것은 두 가지의 조합 때문입니다.

  • 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 🌹


7
아니면 대신 전체적으로 타이프 스크립트를 설치 하시겠습니까?
Ryan Cavanaugh

2
그래, 로컬 왜 자신이 모르는 : (... 돌이켜 보면 그것의 가능성) 나는 아마도 가정 그가 그것을 일부 API를 필요
basarat

RyanCavanaugh 네, 그게 문제였습니다. 그리고 @basarat, 나는 아직 정교하지는 않았으므로 현지와 전 세계에서 그것을 가지고 있었던 것은 단지 감독이었습니다. 또는 내 방어에서, 내가 온 루비 세계에서 그렇게하는 것이 상황에 해를 끼치 지 않으므로 내 상황이었습니다. 감사합니다. 너희 둘 다!
pitosalas

5
사용 exclude속성
basarat

6
Github 링크가 끊어짐
Denny

70

업데이트 : Typings 버전 1.0은 출력 구조를 변경했으며 아래 답변은 1.0 이전 버전과 관련이 있습니다.

타이핑을 사용하고 tsconfig.json에서 제외하는 경우 중복 유형 문제가 발생할 수 있으며 다음과 같은 것이 필요할 수 있습니다.

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

TypeScript와의 통합을 단순화하기 위해 프로젝트에 설치된 모든 입력을 참조하는 두 개의 파일 (types / main.d.ts 및 typings / browser.d.ts)이 생성됩니다 (한 번에 하나만 사용할 수 있음).

따라서 필요한 버전에 따라 "브라우저"또는 "메인"유형 파일을 제외 (또는 포함)해야하지만 둘다는 아닙니다.

이 타이핑 문제 는 더 자세히 설명합니다.


멋진 사람, 이것은 프로젝트에 타이핑 을 포함하여 중복 식별자 오류 문제를 해결합니다 :)
magicode118

왜 "타이핑"을 제외하지 않습니까? 타이핑은 런타임이 아닌 Dev Time에만 적합합니까?
Eric Hartford

컴파일 타임에 유형을 찾을 위치를 정의합니다. "입력"을 제외하면 더 이상 유형을 찾을 수 없습니다. 여기에 컴파일하려고하는데 중복 유형이 있습니다. TypeScript는 런타임이 아니며 코드를 JavaScript로 변환합니다.
RationalDev는 GoFundMonica

2
VS2017에서는 .NETCore2 MVC 앱에서 "bin", "obj"를 제외해야했습니다
OSP

나는 이것에 대해 OSP와 같은 문제가있었습니다. obj 폴더에는 TypeScript 파일이 포함되어 있으므로 중복으로 표시되었습니다. 매번 처음 빌드 할 때 문제가 발생했으며 빌드 유형을 변경하면 빌드 할 때마다 문제가 계속 발생했습니다.
Grungondola

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를 삭제하려면 관리자 액세스 권한이 필요하기 때문에 처음에는 node_modules를 삭제할 수 없었습니다. 내 사용자 계정은 관리자 권한이 있습니다. 실제 문제는 폴더를 사용하는 프로그램을 닫아야한다는 것입니다.
Drew

15

나는이 문제에 부딪쳤다. 을 실행했을 때 npm start중복 식별자 오류가 발생했습니다.

해결책:

프로젝트 루트 폴더에서 다음을 실행하십시오.

rm -r typings
typings install
npm start

모든 것이 잘 작동합니다.


저에게는 폴리 필 es6-shim사용 에서 사용으로 전환 core-js하고 있었고 이것이 효과가 있었던 솔루션입니다. 덜 무거운 접근 방식은을 사용하는 것 typings prune입니다.
StriplingWarrior

나를 위해 작동합니다. 그러나 '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 repo에 문제를 게시 했습니다 .
Bart

1
TSD가 아닌 타이핑을 사용하는 경우 @RationalDev에서 제안한 솔루션을 사용해야합니다.
thitemple

4

내 경우에는 오류가 발생했습니다.

node_modules/@types/es6-promise/index.d.ts (11,15) : 오류 TS2300 : 중복 된 식별자 'Promise'.

그리고 나는 @types/es6-promisepackage.json에 있었지만 tsconfig이미와 함께했습니다 target: "es6". 그래서 Promise컴파일 할 때 충돌이 있다고 생각 합니다.

@types/es6-promisepackage.json파일 에서 제거 하면 문제가 해결되었습니다.


3

tsconfig.json 및 node_modules 에서 파일을 제외하면 문제가 해결 되는 경우를 대비 하여 webpack을 사용하여 동일한 오류가 발생했습니다..d.ts

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

웹 팩 에서도이 오류가 발생했습니다. 서버를 다시 시작하면 문제가 해결되었습니다.
클린트

1

디스크에 예기치 않은 폴더 ( jspm_packages더 이상 사용되지 않음)가있어 소스 제어로 추적되지 않고 IDE에서 숨겨져 서이 문제가 발생했습니다 . 여기에 TypeScript가 중복 설치되어 문제가 발생했습니다.

가장자리가 약간 있지만 다른 사람 이이 솔루션을 찾고있는 경우를 대비하여 여기에 답을 남겨 두십시오.


저와 비슷합니다. Visual Studio Code에서 typescript 파일의 이름을 변경하여 IDE에 더 이상 표시되지 않지만 중복 식별자 오류가 표시되는 보이지 않는 (고아가 된) .js 파일이 발생했습니다.
DAG

0

이 문제가 있었고 프로젝트에 두 번째 node_modules 폴더가 있어야합니다 .- (


폴더 안에 node_modules가있는 라이브러리가 있습니다. 노드 4.6.0을 사용할 때 문제가 발생하지 않았지만 노드 6.9.0에서는 갑자기 오류가 발생합니다.
heman123

이 문제가 시작된 버전이 궁금합니다. 노드 5.6.0에 문제가있었습니다.
Bruno

0

tsconfig.json을 "es2015"및 모듈 : "es2015"를 대상으로 변경 한 후이 오류가 다른 오류와 함께 발생했습니다.

/// <reference path="../../typings/index.d.ts" />main.ts 파일에서 사용되는 기본 (AngularJS2 빠른 시작) 이 문제를 해결하려면 해당 줄을 제거해야했습니다.


0

웹 사이트 폴더에서 lib 폴더를 제거했습니다. 이것은 이전의 타이핑 설치로 생성되었습니다. 이것은 복제되었다. 이것이 제거되었을 때 작동했습니다!


0

노드 폴더에 입력과 종속성이 모두 있기 때문일 수 있습니다. 따라서 @types 폴더에있는 항목을 먼저 확인하고 종속성이있는 경우 복제본을 제거하십시오. 나를 위해 그것은 core.js였습니다


0

package.json 파일에서이 @ types / express-validator를 제거한 다음 npm install을 실행하십시오.

더 읽어보기

작성자 메시지 :이 패키지는 더 이상 사용되지 않습니다. 이것은 express-validator ( https://github.com/ctavan/express-validator )에 대한 스텁 유형 정의입니다 . express-validator는 자체 유형 정의를 제공하므로 @ types / express-validator를 설치할 필요가 없습니다!



-2

비슷한 문제가 발생했습니다. 내 프로젝트의 루트에서 다른 범위로 내 tsconfig.json을 이동하면 도움이됩니다. 내 프로젝트에서 tsconfig.json을 루트에서 wwwroot로 옮겼습니다.


-2

솔루션을 완전히 닫고 프로젝트를 다시 실행하면 문제가 해결되었습니다.


왜 다운 보트를 받았는지 모릅니다. 귀하의 답변을 읽은 후 IntelliJ에서 "잘못된 캐시 및 다시 시작"을 클릭하여 문제가 해결되었으므로 감사합니다!
Johannes Stadler
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.