Typescript 代码类型检查不通过时,可以用 TSlint 监测到么?

问题描述

  • 情况1:如果是属性不存在, IDE 会提醒错误,但是 TSlint/ESlint 不会抛出错误
    clipboard.png
  • 情况2:TSlint 只会抛出在 rules 中有定义的错误,例如下面限制了no-empty-interfacerules, 就会抛出错误
    clipboard.png

相关代码

  • TSlint.json 文件

    {
      "defaultSeverity": "warning",
      "extends": [
        "tslint:recommended"
      ],
      "linterOptions": {
        "exclude": [
          "node_modules/**"
        ]
      },
      "rules": {
        "quotemark": [true, "single"],
        "indent": [true, "spaces", 2],
        "interface-name": false,
        "ordered-imports": false,
        "object-literal-sort-keys": false,
        "no-consecutive-blank-lines": false
      }
    }
    
  • tsconfig.json

    {
      "compilerOptions": {
        "target": "esnext",
        "module": "esnext",
        "strict": true,
        "jsx": "preserve",
        "importHelpers": true,
        "moduleResolution": "node",
        "experimentalDecorators": true,
        "esModuleInterop": true,
        "allowSyntheticDefaultImports": true,
        "sourceMap": true,
        "baseUrl": ".",
        "types": [
          "node"
        ],
        "paths": {
          "@/*": [
            "src/*"
          ]
        },
        "lib": [
          "esnext",
          "dom",
          "dom.iterable",
          "scripthost"
        ]
      },
      "include": [
        "src/**/*.ts",
        "src/**/*.tsx",
        "src/**/*.vue",
        "tests/**/*.ts",
        "tests/**/*.tsx"
      ],
      "exclude": [
        "node_modules"
      ]
    }
    

你期待的结果是什么?

TSlint 能够检查到并抛出 TSlint 代码类型检查(情况1)的错误么?
如果能,如何设置?
如果不能,有什么方法可以在gitHooks.pre-commit 拦截(情况1)的错误,未解决错误禁止提交代码么?

阅读 8.5k
1 个回答

我没有研究过TSlint,但是从软件开发的角度来讲,TSlint不应该抛出类型检查错误。

  • lint类工具设计就是用来检查代码格式(美观度)的,而不是检查逻辑的
  • 如果TSlint自己做代码检查,就要重造tsc的轮子
  • 如果TSlint调用tsc,还不如让用户自己去调用

如果要加上类型检查,首先需要安装typescript

npm install typescript

然后在pre-commit里加上调用tsc的代码。取决于是不是全局安装,代码会略有差异。

TSC="$(git rev-parse --show-toplevel)/node_modules/.bin/tsc"
"$TSC" --noEmit
if [[ "$?" != 0 ]]; then
  printf "\033[41mERR: type check failed\033[0m"
  exit 1
fi
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题