Confuso “identificador duplicado” Mensagem de erro datilografada

Por que estou recebendo isso e muitos mais erros desse tipo? Eu estou adicionando um link para o repository, bem como trechos de código-chave abaixo. Eu acho que tenho um mal-entendido básico de como funciona a dependência e o encadeamento “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'. 

Todo o código pode ser encontrado aqui .

Meu tsconfig.json:

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

Meu 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" } } } 

Meus 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" } } } 

Isso é devido à combinação de duas coisas:

Se nenhuma propriedade “files” estiver presente em um tsconfig.json, o compilador assumirá como padrão include todos os arquivos no diretório e nos subdiretórios contidos. Quando uma propriedade “files” é especificada, apenas esses arquivos são incluídos.

  • Incluindo o typescript como uma dependência do npm: node_modules/typescript/ Isso significa que todos os typescript são incluídos …. existe um lib.d.ts incluído implicitamente no seu projeto ( http://basarat.gitbooks.io/typescript/ content / docs / types / lib.d.ts.html ) e seu conflito com o que vem com a versão NPM do typescript.

Consertar

Listar files explicitamente ou ter algo como atom-typescript gera esta chave para você: https://github.com/TypeStrong/atom-typescript/blob/master/docs/tsconfig.md#filesglob

Atualização : A versão 1.0 do Typings alterou a estrutura de saída e a resposta abaixo está relacionada à versão pre 1.0.

Se você estiver usando o Typings e excluir no seu tsconfig.json, poderá encontrar o problema de tipos duplicados e precisar de algo como o seguinte:

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

Para simplificar a integração com o TypeScript, são gerados dois arquivos – typings / main.d.ts e typings / browser.d.ts – que fazem referência a todas as tipings instaladas no projeto e apenas uma delas pode ser usada por vez.

Então, dependendo da versão que você precisa, você deve excluir (ou include) os arquivos do tipo “browser” ou “main”, mas não ambos, já que é onde os duplicados vêm.

Esta edição de tipings discute mais.

Se você instalou typings separadamente na pasta typings

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

Acabei de me deparar com este problema. Quando eu corri o npm start , recebi um monte de erros de identificador duplicados.

SOLUÇÃO:

Na pasta raiz do projeto, execute:

 rm -r typings typings install npm start 

e tudo funciona bem.

Problema foi resolvido por simplesmente:

  1. Excluindo a pasta node_modules
  2. Executando o npm install para obter todos os pacotes com as versões corretas

No meu caso, o problema ocorreu depois de mudar as ramificações do Git, onde uma nova ramificação estava usando um conjunto diferente de módulos de nós. A ramificação antiga estava usando o TypeScript v1.8, o novo v2.0

Você também pode usar a opção exclude no arquivo tsconfig.json da seguinte forma:

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

No meu caso, recebi o erro

node_modules/@types/es6-promise/index.d.ts (11,15): erro TS2300: Identificador duplicado ‘Promise’.

E eu tinha @types/es6-promise no meu package.json mas meu tsconfig já estava com target: "es6" . Então, eu acho que houve um conflito com a Promise ao compilar.

Removendo @types/es6-promise do meu arquivo package.json resolveu o problema.

Usando o webpack me deparei com o mesmo erro, apenas no caso de excluir o arquivo .d.ts no seu tsconfig.json e node_modules resolveu meu problema:

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

Eu tive esse problema causado por ter uma pasta inesperada no disco ( jspm_packages , não está mais sendo usado) que não foi controlado pelo controle de origem (e oculto do meu IDE). Isso teve uma instalação duplicada do TypeScript, o que causou os problemas.

Pouco de um caso de ponta, mas deixando uma resposta aqui apenas no caso de alguém está caçando para esta solução.

Eu tive esse problema e acontece que eu tinha aa segunda pasta node_modules no meu projeto que não deveria estar lá 🙁

Eu tive esse erro, junto com outros, depois que eu mudei meu tsconfig.json para target: “es2015” e module: “es2015”.

A base (início rápido do AngularJS2) usou /// no arquivo main.ts. Para resolver isso, tive que remover essa linha.

nós removemos uma pasta lib da pasta do site. isso foi criado por uma instalação anterior de tipings. isso se tornou duplicado. Quando isso foi removido funcionou!

Pode ser por causa da digitação e da dependência na pasta do nó. então primeiro verifique o que você tem na sua pasta @types e se você os tiver em dependencies, remova a duplicata. para mim foi core.js

remova esse @ types / express-validator do arquivo package.json e execute npm install

consulte Mais informação

Mensagem do autor: Este pacote foi descontinuado Esta é uma definição de tipos de stub para o express-validator ( https://github.com/ctavan/express-validator ). O express-validator fornece suas próprias definições de tipos, portanto você não precisa de @ types / express-validator instalado!

Eu me deparei com um problema semelhante. Simplesmente mover meu tsconfig.json da raiz do meu projeto para um escopo diferente ajudou. No meu projeto, movi o tsconfig.json da raiz para o wwwroot.