如何在提交之前检查Typescript类型?

6

我希望在提交前检查Typescript类型,因此我使用 tsc --noEmit $(changedFile) 命令。然而,这个命令无法指定 config 文件。

我发现了 --project 选项,但是这个选项会检查整个项目,而我只想检查 changedFile, 因为一些 旧文件 存在类型错误但不需要处理。

所以我该如何在提交前仅检查 changedFile 的类型呢?

4个回答

13
你可以使用一个很棒的工具叫做 lint-staged
这个库会在每次提交前检查你的文件https://github.com/okonet/lint-staged

安装

npx mrm lint-staged

使用方法 适用于 TypeScript

// lint-staged.config.js
module.exports = {
  '**/*.ts?(x)': () => 'tsc -p tsconfig.json --noEmit'
}

3
我只想检查当前提交中更改的文件。 - Mebtte

5

我曾经遇到同样的问题,这个软件包可以帮助我检查lint-staged中的类型:

"**/*.ts?(x)": [
  "tsc-files --noEmit"
]

您可以使用 npm i tsc-files 命令安装 tsc-files 包。


0

你可能想使用一个 pre-commit 钩子(https://git-scm.com/book/en/v2/Customizing-Git-Git-Hooks)。

在这个钩子里,你可以用 git diff --staged --name-only 命令获取即将提交的文件列表,接着你可以运行 tsc --noEmit $(changedFile) 命令来编译这些文件。


3
"tsc --noEmit $(changedFile)" 无法指定 TypeScript 配置文件。 - Mebtte

-1

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接