我希望在提交前检查Typescript类型,因此我使用 tsc --noEmit $(changedFile)
命令。然而,这个命令无法指定 config
文件。
我发现了 --project
选项,但是这个选项会检查整个项目,而我只想检查 changedFile
, 因为一些 旧文件
存在类型错误但不需要处理。
所以我该如何在提交前仅检查 changedFile
的类型呢?
我希望在提交前检查Typescript类型,因此我使用 tsc --noEmit $(changedFile)
命令。然而,这个命令无法指定 config
文件。
我发现了 --project
选项,但是这个选项会检查整个项目,而我只想检查 changedFile
, 因为一些 旧文件
存在类型错误但不需要处理。
所以我该如何在提交前仅检查 changedFile
的类型呢?
lint-staged
。安装
npx mrm lint-staged
使用方法 适用于 TypeScript
// lint-staged.config.js
module.exports = {
'**/*.ts?(x)': () => 'tsc -p tsconfig.json --noEmit'
}
我曾经遇到同样的问题,这个软件包可以帮助我检查lint-staged中的类型:
"**/*.ts?(x)": [
"tsc-files --noEmit"
]
您可以使用 npm i tsc-files
命令安装 tsc-files
包。
你可能想使用一个 pre-commit
钩子(https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)。
在这个钩子里,你可以用 git diff --staged --name-only
命令获取即将提交的文件列表,接着你可以运行 tsc --noEmit $(changedFile)
命令来编译这些文件。
tsc
没有直接处理项目设置中指定文件的方法(如果将文件传递给 tsc
,它会 忽略配置文件),但它允许你 扩展 配置文件并覆盖其中包含的文件列表,例如:
$ cat ./tsconfig-temp.json
{
"extends": "./tsconfig.json",
"include": ["./temp.ts"]
}
jo
创建JSON):$ cat tsc-files.sh
#!/usr/bin/bash
TEMP='./tsconfig-temp.json'
trap 'rm "$TEMP"' EXIT
jo extends=./tsconfig.json include=$(jo -a "$@") > $TEMP \
&& tsc --noEmit --project "$TEMP"
$ tsc-files.sh ./temp.ts
或者,您可以使用npm上的tsc-files包,它会为您完成以下操作:
$ tsc-files --noEmit ./temp.ts