Mensagem de erro datilografada "identificador duplicado" confusa


224

Por que estou recebendo esse e muitos outros erros desse tipo? Estou adicionando um link para o repositório, bem como trechos de código-chave abaixo. Eu acho que tenho um mal-entendido básico de como funciona a cadeia de dependência e "incluir".

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

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

Seu tsd.d.tsprovavelmente se parece com um par de marcas de referência, e não um arquivo JSON.
precisa saber é o seguinte

1
Por que você precisa de um typings.jsonE tsd.d.ts?
CodyBugstein

Eu coloquei a solução aqui, você pode ver. stackoverflow.com/questions/40404353/…
hüseyint

Respostas:


126

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

  • tsconfignão tendo nenhuma filesseção. Em http://www.typescriptlang.org/docs/handbook/tsconfig-json.html

    Se nenhuma propriedade "files" estiver presente em um tsconfig.json, o compilador usará como padrão todos os arquivos no diretório e subdiretórios que o contêm. Quando uma propriedade "arquivos" é especificada, apenas esses arquivos são incluídos.

  • Inclusão typescriptcomo dependência do npm: node_modules/typescript/Isso significa que tudo typescripté incluído .... existe um implicitamente incluído lib.d.tsno seu projeto de qualquer maneira ( http://basarat.gitbook.io/typescript/content/docs/types/lib.d.ts .html ) e está em conflito com o que é fornecido com a versão NPM do texto datilografado.

Consertar

De qualquer lista filesou includeexplicitamente https://basarat.gitbook.io/typescript/docs/project/files.html 🌹


7
Ou instalar datilografado globalmente?
22615 Ryan Cavanaugh

2
Sim, eu não sei por que a sua existência localmente :) eu assumi talvez ele precisava de alguma api dele (em retrospectiva ... é improvável)
basarat

RyanCavanaugh sim, esse era o problema; e @basarat, ainda não sou sofisticado; portanto, foi apenas uma supervisão que eu tinha tanto local quanto globalmente. Ou, em minha defesa, fazer isso no mundo dos rubis de onde eu venho não prejudica as coisas, então esse foi o meu contexto :) Ainda assim, as informações que você adicionou à sua resposta continuam a completar a imagem para mim. Então obrigado. vocês dois!
pitosalas

5
Use excludeproperty
basarat 22/11/2015

6
Link do Github quebrado
Denny

70

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

Se você estiver usando Typings e excluir em seu tsconfig.json, poderá ter problemas com 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 referenciam todas as tipografias instaladas no projeto, e apenas uma pode ser usada por vez.

Portanto, dependendo da versão necessária, você deve excluir (ou incluir) os arquivos do tipo "navegador" ou "principal", mas não os dois, pois é daí que as duplicatas vêm.

Esta edição de Typings discute mais.


Homem impressionante, isso resolve o problema com o erro identificador duplicado de incluindo tipagens em seu projeto :)
magicode118

por que não excluir apenas "digitações"? As digitações são apenas para o tempo de desenvolvimento certo, não para o tempo de execução?
Eric Hartford

Isso está definindo onde encontrar os tipos em tempo de compilação. Se você excluir "digitações", não poderá mais encontrar nenhum tipo. O problema aqui é que ele está tentando compilar e existem tipos duplicados. O TypeScript não é um tempo de execução, ele transpila seu código para JavaScript.
RationalDev gosta de GoFundMonica 27/03

2
No VS2017, tive que excluir "bin", "obj" no aplicativo .NETCore2 MVC
OSP

Eu tive o mesmo problema que o OSP neste. A pasta obj continha os arquivos TypeScript, e eles eram exibidos como duplicados. Isso causou problemas na primeira vez que eu criei todas as vezes e, em seguida, continuei causando problemas toda vez que eu criei uma vez que alterei o tipo de construção.
Grungondola

24

Se você instalou as letras separadamente na pasta de letras

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

2
ah sim - adicionar digitações à minha exclusão corrigiu meu bug.
cport1

1
Eu também tinha uma cópia em / obj, o que causou erros provenientes de "Projetos virtuais datilografados". Adicionar "obj" para excluir os corrigidos.
21716 Jon

Isso interrompe totalmente minha compilação e as letras estão faltando.
Spenhouet 17/09/18

21

O problema foi resolvido simplesmente:

  1. Excluindo a node_modulespasta
  2. Executando npm installpara obter todos os pacotes com versões corretas

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


1
Sim, isso funcionou para mim. Não foi possível excluir o node_modules no início porque ele diz que precisa de acesso de administrador para excluí-lo. Minha conta de usuário tem acesso de administrador; o problema real era que eu precisava fechar os programas que estavam usando a pasta.
Drew

15

Acabei de encontrar este problema. Quando corri npm start, recebi vários erros de identificador duplicados.

SOLUÇÃO:

Na pasta raiz do projeto, execute:

rm -r typings
typings install
npm start

e tudo funciona bem.


Para mim, eu estava mudando de usar es6-shimpara usar core-jsem meus polyfills, e esta é a solução que teria funcionado. Uma abordagem menos pesada é usar typings prune.
precisa

Funciona para mim. Mas acho que deve haver 'npm install' em vez de 'typings install'
Ihor Khomiak

Não tenho nenhuma typingspasta :(
Jamie Hutber 14/01

12

Você também pode usar a opção de exclusão 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"
  ]
}

4
Estou tendo exatamente o mesmo problema. Essa correção não funciona para mim. Estou usando o Typescrip 1.75. Publiquei um problema no repositório do Typescript Github .
Bart Bart

1
Se você estiver usando tipagens e não TSD você deve usar a solução proposta pela @RationalDev
thitemple

4

No meu caso, recebi o erro como

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

E eu tinha @types/es6-promiseno meu package.json, mas o meu tsconfigjá estava com target: "es6". Então eu acho que houve um conflito Promiseao compilar.

A remoção @types/es6-promisedo meu package.jsonarquivo resolveu o problema.


3

Usando o webpack, me deparei com o mesmo erro, caso o .d.tsarquivo tsconfig.json e o node_modules resolvessem meu problema:

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

Também tive esse erro com o webpack, basta reiniciar o servidor e corrigi-lo.
Clint

1

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

É um caso difícil, mas deixamos uma resposta aqui para o caso de alguém procurar esta solução.


Semelhante a mim. Renomeei um arquivo datilografado no Visual Studio Code que causou um arquivo .js invisível (órfão) que não era mais exibido no IDE, mas mostrava o erro de identificador duplicado.
DAG

0

Eu tive esse problema e acontece que eu tinha uma segunda pasta node_modules no meu projeto que não deveria estar lá :-(


Existem algumas bibliotecas que possuem node_modules dentro de suas pastas. Quando eu estava usando o nó 4.6.0, ele nunca criou nenhum problema, mas com o nó 6.9.0, de repente, ele emitiu esse erro.
heman123

Gostaria de saber com qual versão esse problema começou. Eu tive o problema com o nó 5.6.0.
Bruno

0

Eu tive esse erro, juntamente com outros, depois de alterar meu tsconfig.json para o destino: "es2015" e o módulo: "es2015".

A base (início rápido do AngularJS2) usada /// <reference path="../../typings/index.d.ts" />no arquivo main.ts. Para resolver isso, tive que remover essa linha.


0

removemos uma pasta lib da pasta do site. isso foi criado por uma instalação anterior de digitações. isso se tornou duplicado. Quando isso foi removido, funcionou!


0

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


0

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

consulte Mais informação

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



-2

Eu tive um problema semelhante. Simplesmente mover meu tsconfig.json da raiz do meu projeto para um escopo diferente ajudou. No meu projeto, mudei o tsconfig.json da raiz para o wwwroot.


-2

Fechar completamente a solução e executar novamente o projeto resolveu meu problema.


Não sei por que você foi derrotado. Depois de ler sua resposta, cliquei em "Invalidar caches e reiniciar" no IntelliJ e o problema foi resolvido, então obrigado!
Johannes Stadler
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.