React Native Typescript. Typkontroll fungerar inte
Jag arbetar med RN med Typescript. Genom att använda den officiella instruktionen lyckades jag lägga till .tsx- och .ts-filer, men det största problemet jag stötte på är att RN inte alls upptäcker fel typer i filerna. Till exempel.
I början av App.tsx lade jag till fel TS-sats.
let a: number = 5;
a = "test"
När jag lade till det i den vanliga React-appen (för webben) visar TS-kompilatorn mig
Typen '"test"' kan inte tilldelas typen 'nummer'. TS2322
Men när jag gjorde samma sak i fallet med RN, kompilerades det bara och visade inga varningar/fel, etc. Appen startar helt enkelt på emulatorn som om allt vore i ordning.
Det är första gången jag försöker använda RN med Typescript. Tidigare använde jag bara webbappar + Typescript, så därför undrar jag om ett sådant beteende är korrekt? Hur kan jag aktivera typkontroll i fallet med React Native?
P.S. Jag provade till och med den här. Samma beteende.
Tack för all hjälp.
Svar #1
Jag tillbringade nästan hela dagen med att hitta en lösning och det verkar som att RN TypeScript-mallen inte stöder typkontroll direkt. Enligt deras officiella dokumentation innebär användningen av kommandot tsc för att kontrollera typer att vi vanligtvis bara bör kontrollera typer innan vi committar, osv. (det kan göras via några pre-commit hooks som husky)
Men eftersom vi kan använda tsc kan vi också använda watchMode
Jag använde en lösning genom att lägga till skriptet i min package.json för att köra tsc i watch-läge och jag körde det parallellt med det vanliga react-native-kommandot för att få typkontroll vid körning.
// package.json
"scripts": {
"android:ts-watch": "concurrently \"yarn check-types:watch\" \"react-native run-android\"",
"check-types": "tsc",
"check-types:watch": "tsc --watch"
}
Varning. Du behöver installera paketet concurrently om du vill kopiera och klistra in detta skript.
P.S. Tyvärr har inte felvarningarna i konsolen färger (röd, etc.), så det kan vara irriterande, men i alla fall är det mycket bättre än att inte ha typkontroll vid körning alls.
Om någon hittar ett lite mer korrekt sätt, vänligen, låt mig veta
