【发布时间】:2016-11-26 09:22:44
【问题描述】:
我正在编写一个使用 typescript 和 tslint 作为 linter 的程序。 我目前最喜欢的规则列表如下(tslint.json):
{
"extends": "tslint:recommended",
"rules": {
"comment-format": [false, "check-space"],
"eofline": false,
"triple-equals": [false, "allow-null-check"],
"no-trailing-whitespace": false,
"one-line": false,
"no-empty": false,
"typedef-whitespace": false,
"whitespace": false,
"radix": false,
"no-consecutive-blank-lines": false,
"no-console": false,
"typedef": [true,
"variable-declaration",
"call-signature",
"parameter",
"property-declaration",
"member-variable-declaration"
],
"quotemark": false,
"no-any": true,
"one-variable-per-declaration": false
}
}
虽然我使用的是 Tslint,但它无法捕获对参数数量错误的函数的调用。 例如我有以下功能:
let displayTimer: Function = function(): void {
document.getElementById('milliseconds').innerHTML = ms.toString();
document.getElementById('seconds').innerHTML = seconds.toString();
document.getElementById('minutes').innerHTML= minutes.toString();
};
我从另一个函数内部调用它:
let turnTimerOn: Function = function(): void {
ms += interval;
if (ms >= 1000)
{
ms = 0;
seconds += 1;
}
if (seconds >= 60)
{
ms = 0;
seconds = 0;
minutes += 1;
}
displayTimer(1);
};
如您所见,我正在向 displayTimer 函数传递一个参数(在本例中为数字 1,但它可以是其他任何值)并且 linter 没有捕捉到它。
【问题讨论】:
-
好吧,那是因为它不是无效的javascript。传递未定义为参数的值并稍后在函数中使用 arguments 检索它们是完全有效的。
-
感谢您指出这一点。我来自 Java/C# 背景,所以我希望能够检查这种类型的不匹配。有什么想法吗?
-
也许我遗漏了一些东西,但函数没有声明为
function displayTimer():void {有什么原因吗?我认为 TS 最好能够检查一下。现在打字的所有工作都是let displayTimer:Function = ???。它不知道你是否会在某个时候为它重新分配 null 或其他函数。
标签: javascript typescript tslint