Я пишу программу с использованием машинописных шрифтов и 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, но это может быть что-то еще), и линкер не поймает этого.
ну, это потому, что это не недопустимый javascript. вполне допустимо передать значения, которые вы не определили как параметры, и затем восстановить их в функции с помощью ** аргументов **. – toskv
Спасибо, что указали это. Я исхожу из фона Java/C#, чтобы я мог проверить этот тип несоответствия. Все идеи? – skiabox
Возможно, мне что-то не хватает, но есть причина, по которой функция не объявляется как функция displayTimer(): void {'? Я думаю, что TS лучше сможет это проверить. Прямо сейчас все, что нужно для ввода, это «let displayTimer: Function = ???'. Он не знает, будет ли в какой-то момент переназначить нуль или какую-то другую функцию. – Katana314