Во время выполнения вы не можете отличить сигнатуры функций.Function
имеет свойство length
, которое может определять количество параметров функции, и вы можете использовать это для различения функций с разным количеством аргументов, но помните, что существует ошибка вокругсвойство length
и необязательные параметры при переносе в ES5
.
Суть в том, что не имеет значения, принимает функция параметры или нет, вы можете просто передать все поддерживаемые параметры и, еслиФункция использует их, что хорошо, а если нет, то тоже хорошо, никакого вреда не будет:
class MyClass {
public OnAction(actions: Actions, x: (y?:any, z?:any) => void) {
// We pass both arguments
// argument values are null for demo, you can replace with actual parameters
x(null, null);
}
}
new MyClass().OnAction(Actions.add, ()=> {})// fine arguments passed but unused
new MyClass().OnAction(Actions.add, (vm)=> { console.log(vm) })// one argument used
new MyClass().OnAction(Actions.add, (vm, c)=> { console.log(vm); console.log(c)})// both argument used