有没有一种自动生成如下类型的好方法?
type Fn = (arg1: number, arg2: string, arg3: boolean) => void;
到
type Fn2 = (arg1: number, arg2: string) => void;
理想的是,如下所示的便捷快捷方式。
type Fn2 = OmitLastArg<Fn>
答案 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