【发布时间】:2018-12-27 22:53:52
【问题描述】:
采用以下 Typescript 箭头函数:
/**
* Returns a probably unique component name.
*
* @param baseName a suggested name to make unique.
* @returns a probably unique name.
*/
export const getUniqueComponentName = (
baseName
): string => {
return baseName + Math.round(Math.random() * 10000000)
}
当在tsconfig.json 中配置 Typescript 时:
"noImplicitAny": true,
这会导致编译错误:
[ts] 参数“baseName”隐含的类型为“any”。
Visual Studio Code 也很聪明,可以在开发过程中通知您这个问题。
我的目标是创建一个预提交 git 挂钩,以防止此类错误最终出现在版本控制中。我尝试使用tslint、husky 和lint-staged 使用此npm script:
"lint": "tslint --project tsconfig.json --config tslint.json"
但是,这不会导致 tslint 显示编译错误。它会被默默地忽略。
然后我尝试在 tslint.json 中添加规则:
"typedef": [
true,
"arrow-parameter"
]
虽然这确实让 tslint 抱怨,但它也开始在 tsc 编译器不抱怨的匿名箭头函数中抱怨。在这些箭头函数中,不需要添加类型,因为类型之前已经在父范围中设置(它们是推断的)。
所以基本上,在这种情况下,我希望 tslint 的行为与 tsc 相同。任何时候出现会导致编译失败的错误(例如上面的箭头函数),我都想阻止提交,但没有实际编译为 Javascript。这可能吗?
【问题讨论】:
-
运行
tsc --noEmit会起作用吗?这本质上是在不生成 JS 的情况下运行静态分析器。 -
@y2bd 是的,我确认有效;这是推荐的方法吗?除了运行 tslint?
-
在我的工作流程中,我通常会进行正常构建,然后丢弃工件(以及单独的 lint 阶段)。如果您处于不理想的情况,这似乎完全没问题。
-
@y2bd 根据github.com/okonet/lint-staged/issues/412 不可能让
lint-staged仅在提交的文件上运行tsc。仅当您不传入p标志但随后所有配置选项都被忽略时,这才有可能。此外,您不能将paths配置作为命令行参数传递,所以不使用p似乎不是一种选择? -
@y2bd 如果您能详细说明我之前的问题,我会提供 150 个代表的赏金
标签: typescript tslint pre-commit-hook husky lint-staged