Förvirrande "duplicerat identifierare" Typescript-felmeddelande


Varför får jag detta och många fler fel av den här typen? Jag lägger till en länk till repot samt viktiga kodsnuttar nedan. Jag tror att jag har en grundläggande missuppfattning om hur beroendet och kedjning av "include" fungerar.

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'.

All kod kan hittas här.

Min tsconfig.json:

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

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

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

Svar #1

Detta beror på kombinationen av två saker:

  • tsconfig har ingen files-sektion. Från http://www.typescriptlang.org/docs/handbook/tsconfig-json.html

    Om ingen "files"-egenskap finns i en tsconfig.json, inkluderar kompilatorn som standard alla filer i den innehållande katalogen och underkatalogerna. När en "files"-egenskap anges inkluderas endast dessa filer.

  • Att inkludera typescript som ett npm-beroende: node_modules/typescript/ Detta betyder att hela typescript inkluderas... det finns ändå en implicit inkluderad lib.d.ts i ditt projekt (http://basarat.gitbook.io/typescript/content/docs/types/lib.d.ts.html) och den konflikerar med den som levereras med NPM-versionen av typescript.

Fixa

Ange antingen files eller include uttryckligen https://basarat.gitbook.io/typescript/project/compilation-context/files 🌹

Svar #2

Uppdatering: Version 1.0 av Typings ändrade utdata-strukturen och nedanstående svar gäller versionen före 1.0.

Om du använder Typings och exclude i din tsconfig.json kan du stöta på problemet med duplicerade typer och behöver något liknande följande:

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

För att förenkla integrationen med TypeScript genereras två filer - typings/main.d.ts och typings/browser.d.ts - som refererar till alla typings som installerats i projektet, men endast en av dem kan användas åt gången.

Så beroende på vilken version du behöver bör du utesluta (eller inkludera) filerna av typen "browser" eller "main", men inte båda, eftersom det är här dubbletterna kommer från.

Detta Typings-problem diskuterar det mer.

Svar #3

Problemet löstes enkelt genom att:

  1. Tar bort node_modules-mappen
  2. Kör npm install för att få alla paket med rätt versioner

I mitt fall uppstod problemet efter att ha bytt Git-grenar, där en ny gren använde en annan uppsättning node-moduler. Den gamla grenen använde TypeScript v1.8, den nya v2.0

Svar #4

Om du har installerat typings separat i typings-mappen, lägg till detta i tsconfig.json:

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

Svar #5

Du kan också använda exclude-alternativet i tsconfig.json-filen på följande sätt:

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

Svar #6

Att aktivera skipLibCheck i tsconfig löste det för mig.

{
  "compilerOptions": {
    "skipLibCheck": true /* Skip type checking all .d.ts files. */
  },
  "exclude": ["node_modules"],
  "include": ["./src/**/*.ts"]
}

Svar #7

Jag sprang precis in i det här problemet. När jag körde npm start fick jag en massa fel om dubbla identifierare.

LÖSNING:

Från projektets rotmapp kör:

rm -r typings
typings install
npm start

och allt fungerar bra.

Relaterade artiklar