Zoeken op website

TypeScript en React Native, honderden fouten van node_modules/@types bij het compileren


Ik ben momenteel mijn RN-project aan het migreren naar TypeScript. Ik heb het merendeel van mijn JS-code afgerond, en nu wanneer ik tsc uitvoer, krijg ik enkele honderden fouten die allemaal lijken te zijn

error TS 2717: Subsequent property declarations must have the same type. Property
  prop must be of the type TYPE,
  but here has type TYPE

bijvoorbeeld:

error TS2717: Subsequent property declarations must have the same type.  Property
  'view' must be of type 'SVGProps<SVGViewElement>',
  but here has type 'SVGProps<SVGViewElement>'.

wat dubbel verwarrend is omdat de vermelde typen bijna altijd identiek zijn.

Ik kan mijn app uitvoeren, ik krijg nog steeds nuttige berichten van tslint, en eventuele fouten die specifiek zijn voor mijn code verschijnen onderaan de lijst met compilerfouten.

Mijn tsconfig.json is momenteel:

{
  "compilerOptions": {
    "allowJs": true,
    "target": "es2018",
    "outDir": "dist",
    "module": "commonjs",
    "sourceMap": true,
    "lib": ["esnext", "es7", "dom", "es6"],
    "jsx": "react-native",
    "strict": true,
    "allowSyntheticDefaultImports": true,
    "esModuleInterop": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "types": ["react-native"]
  },
  "include": ["src/**/*"],
  "exclude": ["node_modules", "**/*.spec.ts"]
}

Ik heb verschillende oplossingen geprobeerd, waaronder het instellen van types op [] volgens de TypeScript-documentatie en het instellen van exclude op verschillende vormen van node_modules zoals ./node_modules, node_modules/*, enz., maar geen van deze wijzigingen heeft enig effect gehad.

Antwoord #1

Oké, ik kon dit oplossen. Ik weet niet helemaal zeker hoe afhankelijkheden worden beheerd via yarn, maar mijn probleem lag zeker bij de afhankelijkheden.

Eerst heb ik al mijn @types/*-bibliotheken uit mijn afhankelijkheden verwijderd, en toen heb ik mijn node modules-map verwijderd.

Toen installeerde ik, ondanks wat de meerderheid van de tutorials en handleidingen zal zeggen, alleen @types/react-native en niet @types/react. @types/react-native voegde de React-typings automatisch toe. Ik denk dat de typings voor @types/react mogelijk afhankelijk waren van de node-typings, en door deze expliciet te installeren bracht ik een hoop conflicten teweeg, zowel tussen @types/react-native en @types/node als tussen @types/react-native en @types/react. Mijn project compileert nu zonder fouten.

Antwoord #2

De hoofdoorzaak van het probleem lijkt te komen door de Typescript-compiler die de bibliotheken controleert. Door skipLibCheck: true toe te voegen aan tsconfig.json wordt het controleren van de bibliotheken overgeslagen.

Zie Hoe tsc gedwongen kan worden de node_modules map te negeren? voor een gedetailleerde uitleg.

Gerelateerde artikelen