TypeScript ve React Native, derleme sırasında node_modules/@types'ten yüzlerce hata
Şu anda RN projemi TypeScript'e taşıyorum. JS kodumun çoğunu bitirdim ve şimdi tsc komutunu çalıştırdığımda hepsi şu şekilde görünen birkaç yüz hata alıyorum
error TS 2717: Subsequent property declarations must have the same type. Property
prop must be of the type TYPE,
but here has type TYPE
örneğin:
error TS2717: Subsequent property declarations must have the same type. Property
'view' must be of type 'SVGProps<SVGViewElement>',
but here has type 'SVGProps<SVGViewElement>'.
bu, listelenen türler neredeyse her zaman aynı olduğu için iki kat kafa karıştırıcı.
Uygulamamı çalıştırabiliyorum, hala tslint'ten faydalı mesajlar alıyorum ve koduma özgü herhangi bir hata, derleyici hataları listesinde en altta görünüyor.
Benim tsconfig.json dosyam şu anda:
{
"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"]
}
TypeScript belgelerine göre types'ı [] olarak ayarlamak ve exclude'yu ./node_modules, node_modules/* gibi çeşitli node_modules biçimlerine ayarlamak dahil olmak üzere çeşitli çözümler denedim, ancak bu değişikliklerin hiçbiri herhangi bir etki yaratmadı.
Cevap #1
Tamam, bunu çözebildim. Bağımlılıkların yarn aracılığıyla nasıl yönetildiğinden tamamen emin değilim ama benim problemim kesinlikle bağımlılıklardı.
Önce tüm @types/* kütüphanelerimi bağımlılıklarımın içinden kaldırdım, ardından node modules klasörümü sildim.
Sonra, çoğu eğitim ve rehberin ne dediğine rağmen, sadece @types/react-native kurdum, @types/react değil. @types/react-native kendi başına react tiplerini ekledi. Düşünüyorum ki @types/react tipleri belki node tiplerine bağlıydı ve onları açıkça kurarak hem @types/react-native ile @types/node arasında hem de @types/react-native ile @types/react arasında bir sürü çatışma yarattım. Projem şimdi sorunsuz bir şekilde derleniyor.
Cevap #2
Sorunun temel nedeni, Typescript derleyicisinin kütüphaneleri kontrol etmesinden kaynaklanıyor gibi görünüyor. tsconfig.json dosyasına skipLibCheck: true eklemek, kütüphanelerin kontrol edilmesini atlar.
Detaylı açıklama için tsc'nin node_modules klasörünü görmezden gelmesini nasıl zorlayacağını görün.