在Typescript中将函数作为参数接收时,如何执行函数类型?

时间:2018-10-09 20:58:23

标签: typescript

Typescript可以防止将期望更多参数的函数(作为参数传递给另一个函数)传递给函数。但是当确实要获得比预期更多的参数时,它不会阻止传递函数。

这是(SSCCE)代码:

const takesFnWith3args = (fn3args: (a1: boolean, a2: number, a3: string) => void): void => {
  // See, it isn't `a3?: boolean` it's `a3: boolean`!!
  const importantKey = 'Very important parameter';
  fn3args(true, 1, importantKey);
}

const fn2args = (a1: boolean, a2: number): void => {
  console.log('I don\'t see any keys around here');
}

const fn4args = (a1: boolean, a2: number, a3: string, a4: string): void => {
  console.log('I have 4 arguments');
}

takesFnWith3args(fn2args); // Not an error <-- Here is the problem!
takesFnWith3args(fn4args); // Error

如何强制仅接受指定的函数类型?我不知道如何使TS强制执行fn2args 不能作为参数传递给takesFnWith3args函数。

据我了解,鸭式输入之所以起作用,是因为函数子类型与参数子类型之间的contravariance

fn2args <= fn3args是因为args of fn2args >= args of fn3args output of fn2args <= { {1}}。 (“ output of fn3args”的意思是“ 的子类型”)

但是如何防止这种行为?可能吗我的用例是,当我更改组件内部的功能规范时,使编译器对我有所帮助。然后,我被告知我没有处理多余的参数,应该在程序按预期工作之前加以解决。

0 个答案:

没有答案