【保存時にエラー発生】VSCodeでPrettierを使うとTypeScript Reactのインポートに「value」が追加されてしまう?原因と解決策
VSCodeのPrettierがTypeScript Reactのインポートに「value」を追加してしまう問題とその解決策
この問題を解決するには、以下の2つの方法があります。
Prettierの設定を変更する
.prettierrcファイルで、import-helpers
オプションをfalse
に設定します。このオプションは、Prettierがデフォルトのインポートヘルパーを自動的に挿入するのを無効にします。
{
"import-helpers": false
}
ESLintを使用する
ESLintプラグインとeslint-plugin-import
ルールを使用して、インポートの構文を検証および修正できます。このルールは、デフォルトインポート以外のインポートに「value」キーワードを追加しないようにPrettierに指示します。
.eslintrc.jsファイルに以下の設定を追加します。
{
"plugins": ["eslint-plugin-import"],
"rules": {
"import/no-unresolved": "error",
"import/named-imports": ["error", "never-default"],
"import/default-import": "off"
}
}
- 詳細については、PrettierとESLintの公式ドキュメントを参照してください。
- 問題が解決しない場合は、PrettierとESLintのデバッグログを確認して、潜在的なエラーがないかを確認してください。
- 上記の解決策に加えて、PrettierとESLintのバージョンが互換性があることを確認してください。
src/
├── App.tsx
├── index.tsx
├── App.test.tsx
├── package.json
├── README.md
└── tsconfig.json
コード
App.tsx
import React from 'react';
import './App.css';
function App() {
return (
<div className="App">
<h1>Hello, World!</h1>
</div>
);
}
export default App;
.App {
text-align: center;
}
index.tsx
import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
ReactDOM.render(
<React.StrictMode>
<App />
</React.StrictMode>,
document.getElementById('root')
);
package.json
{
"name": "my-react-app",
"version": "0.0.1",
"description": "My React app",
"main": "index.tsx",
"scripts": {
"start": "react-scripts start",
"test": "react-scripts test",
"build": "react-scripts build"
},
"keywords": ["react", "typescript", "eslint", "prettier"],
"author": "Your Name",
"license": "MIT",
"devDependencies": {
"@types/react": "^18",
"@types/react-dom": "^18",
"eslint": "^8",
"eslint-config-prettier": "^8",
"eslint-plugin-import": "^2",
"eslint-plugin-react": "^8",
"prettier": "^2",
"react": "^18",
"react-dom": "^18",
"ts-node": "^10",
"typescript": "^4"
}
}
tsconfig.json
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true,
"jsx": "react",
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"noImplicitAny": true,
"noImplicitReturns": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"strictNullChecks": true,
"declaration": true
},
"include": ["src/**/*.ts", "src/**/*.tsx"]
}
.eslintrc.js
{
"extends": [
"eslint-config-prettier",
"plugin:import/errors",
"plugin:import/warnings",
"plugin:react/recommended"
],
"parser": "@typescript-eslint/parser",
"plugins": ["@typescript-eslint"],
"rules": {
"import/no-unresolved": "error",
"import/named-imports": ["error", "never-default"],
"import/default-import": "off"
}
}
.prettierrc
{
"import-helpers": false,
"singleQuote": true,
"trailingComma": "es5",
"bracketSpacing": true,
"arrowParens": "avoid",
"semi": true,
"useTabs": false,
"tabWidth": 2,
"printWidth": 80
}
使用方法
- 上記のコードをディレクトリに保存します。
- ターミナルで以下のコマンドを実行します。
npm install
- 以下のコマンドを実行して開発サーバーを起動します。
npm start
- ブラウザで
http://localhost:3000
を開くと、Hello, World!
というメッセージが表示されます。
.prettierignoreファイルを作成し、インポートを含む特定のファイルまたはディレクトリをPrettierのフォーマット処理から除外できます。
src/
├── App.tsx
├── index.tsx
├── App.test.tsx
├── package.json
├── README.md
├── tsconfig.json
└── .prettierignore
.prettierignoreファイルに以下の内容を追加します。
src/App.tsx
src/index.tsx
Prettierプラグインを拡張する
Prettierプラグインを拡張して、問題のある動作を修正できます。これは、より高度なカスタマイズが必要な場合に役立ちます。
TypeScriptコンパイラオプションを使用する
TypeScriptコンパイラのesModuleInterop
オプションをtrue
に設定すると、Prettierがデフォルトインポートヘルパーを自動的に挿入するのを無効にすることができます。
{
"compilerOptions": {
"target": "es6",
"module": "commonjs",
"strict": true,
"jsx": "react",
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"noFallthroughCasesInSwitch": true,
"noImplicitAny": true,
"noImplicitReturns": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"strictNullChecks": true,
"declaration": true
},
"include": ["src/**/*.ts", "src/**/*.tsx"]
}
別のフォーマッターを使用する
Prettier以外にも、TypeScript Reactのコードをフォーマットできるフォーマッターはいくつかあります。BeautifyやJS Beautifierなどのツールを試してみるのも良いでしょう。
手動でフォーマットする
問題が解決しない場合は、手動でコードをフォーマットすることもできます。これは、時間の制約がある場合や、よりきめ細かい制御が必要な場合に役立ちます。
reactjs typescript visual-studio-code