I am writing a program using typescript and tslint as a linter. My current favorite list of rules is the following (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
}
}
Although I am using Tslint it fails to catch a calling to a function with wrong number of parameters. For example I have the following function :
let displayTimer: Function = function(): void {
document.getElementById('milliseconds').innerHTML = ms.toString();
document.getElementById('seconds').innerHTML = seconds.toString();
document.getElementById('minutes').innerHTML= minutes.toString();
};
And I am calling it with from inside another function like this :
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);
};
As you can see I am passing a parameter to the displayTimer function (in this case the number 1 but it could be anything else) and the linter is not catching that.
Just remove the type Function
and TypeScript will check the signature:
let displayTimer = function(): void {
// ...
};
displayTimer(1); // Error: Supplied parameters does not match any signature of call target
The inferred type of displayTimer
is not Function
(which accepts any signatures) but () => void
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.