Почему не возвращаются ошибки в параметрах функции?
Почему ts не ругается, если в типе я указал, что функция принимает 2 параметра, а в самой функци либо без параметров, либо 1, либо 2? Ведь я не указал, что параметр может принимать undefined "?"
type AA = (b: string, c: number) => void
const aa: AA = () => {
// to do something
};
const aa2: AA = (b) => {
// to do something
};
const aa3: AA = (b, c) => {
// to do something
};
И только в таком случае - ошибка
Type '(b: any, c: any, d: any) => void' is not assignable to type 'AA'.
const aa4: AA = (b, c, d) => {
// to do something
};
И что нужно сделать, чтобы ts возвращал ошибку, если количество параметров не соответствует типу?
Ответы (1 шт):
тип AA указывает, что функция принимает два параметра. Это означает, что при вызове данной функции обязательно нужно передать два аргумента.
Три дальнейших примера сохраняют в переменную с типом AA функции с меньшим количеством аргументов.
Почему это работает?
Присваиваемые функции, определяют необходимое им количество аргументов (0, 1, 2). Тип AA гарантирует, что при вызове эти аргументы будут переданы. Поэтому и присваивать такие функции в переменную с типом AA можно.
Почему не работает третий вариант?
Присваиваемая функция требует 3 аргумента. Однако тип AA может гарантировать только 2, таким образом, при вызове мог бы быть пропущен обязательный аргумент.
Поэтому присвоить такую функцию в переменную с типом AA нельзя.
TS проверяет, чтобы было передано как минимум требуемое количество аргументов при вызове. На данный момент ужесточить проверку нельзя.