如何获得省略最后一个参数的函数类型

时间:2018-09-08 14:22:02

标签: typescript

有没有一种自动生成如下类型的好方法?

type Fn = (arg1: number, arg2: string, arg3: boolean) => void;

type Fn2 = (arg1: number, arg2: string) => void;

理想的是,如下所示的便捷快捷方式。

type Fn2 = OmitLastArg<Fn>

1 个答案:

答案 0 :(得分:2)

我非常确定我可以使用新的Typescript 3.0传播运算符来执行此操作,但只能在函数末尾使用

  List<MyResultObject> _results;

  void _search(String queryString) {
    // do some searching and sorting
    // then call setState() with the results
    // and then in your ListView you can read from results
    // (handle empty, default case as well in view)
    setState(() {
      _results = ...
    });
  }

  List<Widget> _resultWidgets() {
    if (_results.isEmpty) return _defaultWidgets();
    _results.map((r) => _buildRowWidget(s)).toList();
  }

我最终创建了一堆测试来匹配函数签名并推断其类型。并不是最漂亮的方法,而是唯一对我有用的方法。

// DOES NOT WORK 
// Error: A rest parameter must be last in a parameter list.
type OmitLastArg<FnType> = FnType extends (...args: infer A, last: infer L) => infer R 
    ? (...args: A) => R
    : any