gts
Google の tsconfig.json
@google-cloud/ や googleapis/ 以下の ts project で使われている
TSLint から typescirpt-eslint への以降はまだ
2020/4/10 2.0.0 がリリースされた
eslint の対象
$ eslint '**/*.ts' '**/*.tsx' '**/*.jsx' '**/*.js' --no-error-on-unmatched-pattern 相当
build とか抜いておいたほうがよい
CI やセットアップでどう使うか
$ npx gts init --yarn --no
よく書き換える場所
prepare, pretest は個人的には要らない
engines
指定できるなら追加する、eslint が node8 の builtin にないよとか怒ってくる
code:engine.json
"engines": {
"node": ">=12"
},
compilerOptions
"lib": ["es2018", "DOM"]
デフォルトは es2018 のみ、DOM を要求するライブラリも多い
(どちらでも) "esModuleInterop": true
ts で require せざるおえないのが気持ち悪いなら true に
デフォルトで有効にしないのは synthetic imports を嫌ってのよう
(どちらでも) "rootDir": "src"
出力ディレクトリに srcが含まれるのが嫌なら
build/src/...
include: [ ..., "node_modules", "src/**/*.test.ts" ]
test も include させる方針のようなので include に test/**/*.ts が指定されている、外してよいかも
code:exclude
"include": [
"src/**/*.ts",
],
"exclude": [
"src/**/*.test.ts"
]
code:package.json
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"src/**/*.{ts,tsx}": [
"gts fix"
]
},
eslintrc.json
"ignorePatterns": [ "build/" ]
コンパイル結果を lint したくない場合
jest 使う
jest @types/jest ts-jest eslint-plugin-jest を追加する
plugins, env, overrides でちょこちょこ指定、めんどい
code:.eslintrc-jest.json
{
"extends": "./node_modules/gts/",
"plugins": [
"node",
"prettier",
"jest"
],
"env": {
"jest/globals": true // これいるっけ? → いる、 expect などの globals
},
"overrides": [
{
// テストコードで制約を緩める
"files": [
"*.test.ts"
],
"rules": {
"@typescript-eslint/no-explicit-any": "off"
}
}
]
}
React
eslint-plugin-react を追加する
code:.eslintrc-react.json
{
"extends": [
"./node_modules/gts/",
"plugin:react/recommended"
],
"plugins": [
"node",
"react",
"prettier",
],
"rules": {
"react/react-in-jsx-scope": "off" // Next.js
}
}
gts install がほしい
依存だけインストールするサブコマンド
手元では gts init で設定しても package.json に記録されていない(package-lock.json) に書かれる?
CI 等で困る