TS5055
Emisja na własne źródło
Cannot write file 'src/app.js' because it would overwrite input file.Własne słowa kompilatora. Nietłumaczone — to ten ciąg, który wkleiłeś w wyszukiwarkę.
Przy włączonym `allowJs` plik `.js` jest zarazem wejściem i nazwą wyjścia. Jeśli wyjście trafia tam, gdzie leży wejście, kompilator nadpisałby plik, który właśnie przeczytał.
Odtworzenie
// tsconfig.json { "compilerOptions": { "allowJs": true, "outDir": "src" } } // src/app.js — read as an input, and the exact path the emit would land on export const version = 1
Build potwierdza, że to emituje dokładnie ten kod.
Dlaczego kompilator tak mówi
Nic innego w tym katalogu nie jest zgłaszane o pliku; to jest zgłaszane o budowaniu. `allowJs` wstawia `src/app.js` do programu jako źródło, a jego kompilacja daje JavaScript, który emiter chce nazwać `app.js` w `outDir` — czyli tą samą ścieżką. Kompilator nie zniszczy wejścia, by zadośćuczynić konfiguracji, więc odmawia przed zapisaniem czegokolwiek i cała emisja staje. Dlatego też w katalogu wyjściowym nic się nie pojawia: to nie ostrzeżenie o jednym pliku, to budowanie, które się nie odbyło.
Naprawy
- 01
// tsconfig.json { "compilerOptions": { "allowJs": true, "outDir": "dist" } } // src/app.js stays an input; the emit lands in dist/ export const version = 1
Daj wyjściu własny katalog. Wspólny folder wejść i wyjść to cały problem, a każde inne rozwiązanie wynika z ich rozdzielenia.
- 02
// tsconfig.json { "compilerOptions": { "allowJs": true, "checkJs": true, "noEmit": true } } // src/app.js is checked and left exactly as it is export const version = 1
Albo przestań emitować. Jeśli projekt buduje już bundler, TypeScript jest tu od sprawdzania — `noEmit` to mówi, a kolizja nie może powstać.
Wniosek
Zdecyduj, czy TypeScript buduje ten projekt, czy tylko go sprawdza. Ten błąd to najczęściej projekt, który odpowiedział na oba naraz.

