Visual Studio 2015 で TypeScript エラー "Cannot write file ... because it would overwrite input file." が発生する原因と解決方法
Visual Studio、TypeScript、Visual Studio 2015 で発生する "Typescript error "Cannot write file ... because it would overwrite input file."" エラーについて
Visual Studio 2015 で TypeScript を使用して開発している場合、tsc
コマンドを実行すると、"Cannot write file ... because it would overwrite input file." というエラーが発生することがあります。
原因
このエラーは、出力ファイル名が既存の入力ファイルと同じである場合に発生します。これは、以下のような状況で起こりえます。
- 出力ファイル名がデフォルトの
out.js
であり、入力ファイルと同じ名前の.ts
ファイルが存在する場合。 --outFile
オプションを使用して出力ファイル名を指定し、そのファイル名が既存の入力ファイルと同じ場合。
解決策
このエラーを解決するには、以下の方法があります。
- 出力ファイル名を変更する: デフォルトの出力ファイル名 (
out.js
) を変更するか、--outFile
オプションを使用して別のファイル名を指定します。 - 入力ファイル名を変更する: 入力ファイル名を変更して、出力ファイル名と一致しないようにします。
- --noEmit オプションを使用する:
tsc
コマンドに--noEmit
オプションを指定すると、JavaScript ファイルは生成されません。これは、TypeScript の型チェックのみを行いたい場合に便利です。
例
以下の例では、--outFile
オプションを使用して出力ファイル名を app.js
に指定しています。
tsc app.ts --outFile app.js
このコマンドを実行すると、app.ts
ファイルがコンパイルされ、app.js
という名前の JavaScript ファイルが生成されます。
補足
このエラーは、Visual Studio 2015 だけでなく、他のバージョンの Visual Studio でも発生する可能性があります。また、TypeScript のバージョンによっても解決方法が異なる場合があります。
ファイル構成
- src/
- app.ts
- tsconfig.json
app.ts
// app.ts
function helloWorld() {
console.log("Hello, world!");
}
helloWorld();
tsconfig.json
{
"compilerOptions": {
"target": "es5",
"module": "commonjs",
"outDir": "dist"
}
}
コマンド
tsc src/app.ts
実行結果
$ tsc src/app.ts
tsc: Successfully compiled 1 file.
$ ls dist/
app.js
このコードでは、tsc
コマンドを使用して src/app.ts
ファイルをコンパイルしています。tsconfig.json
ファイルで outDir
オプションを指定しているので、出力ファイルは dist/app.js
という名前になります。
--noEmit
オプションを使用する例:
tsc src/app.ts --noEmit
このコマンドを実行すると、app.js
ファイルは生成されません。
tsc src/app.ts --outFile app.min.js
Typescript error "Cannot write file ... because it would overwrite input file." エラーを解決するその他の方法
--rootDir
オプションを使用すると、入力ファイルの検索パスを指定することができます。このオプションを使用することで、出力ファイル名が既存の入力ファイルと同じであっても、エラーが発生せずにコンパイルすることができます。
tsc src/app.ts --rootDir src --outFile app.js
--declaration
オプションを使用すると、TypeScript の型定義ファイル (.d.ts) を生成することができます。このオプションを使用することで、JavaScript ファイルだけでなく、型定義ファイルも生成することができます。
tsc src/app.ts --declaration --outFile app.js
--noImplicitAny
オプションを使用すると、変数の型を明示的に指定する必要があります。このオプションを使用することで、コードの型安全性
tsc src/app.ts --noImplicitAny --outFile app.js
ソースコードを変更する
場合によっては、ソースコードを変更することで、このエラーを解決することができます。例えば、以下のような変更が考えられます。
- 出力ファイル名と同じ名前の変数や関数を変更する。
- 出力ファイル名と同じ名前のモジュールを別の名前でインポートする。
このエラーを解決するには、いくつかの方法があります。どの方法が最適かは、状況によって異なります。
visual-studio typescript visual-studio-2015