【发布时间】:2021-12-20 09:11:44
【问题描述】:
是否可以从另一个参数推断出一个函数参数?我想根据第一个参数的推断来推断第二个参数。
当前代码可以在 GitHub slickEventHandler.interface.ts 上,如下
export type GetSlickEventType<T> =
T extends (infer U)[] ? U :
T extends (...args: any[]) => infer U ? U :
T extends SlickEvent<infer U> ? U : T;
export type GetEventType<T> = T extends infer U ? U : T;
type Handler<H> = (e: SlickEventData, data: GetSlickEventType<H>) => void;
export interface SlickEventHandler<T = any> {
subscribe: (slickEvent: SlickEvent<T>, handler: Handler<T>) => SlickEventHandler<T>;
unsubscribe: (slickEvent: SlickEvent<T>, handler: Handler<T>) => SlickEventHandler<T>;
unsubscribeAll: () => SlickEventHandler<T>;
}
这使我可以执行以下操作(实时代码here)
const onSelectedRowsChangedHandler = this._grid.onSelectedRowsChanged;
(this._eventHandler as SlickEventHandler<GetSlickEventType<typeof onSelectedRowsChangedHandler>>).subscribe(onSelectedRowsChangedHandler, (_e, args) => {
args.column;
});
这可以进行正确的推断
但是,我正在寻找的是一种更简单的方法,如下所示(但我目前使用下面的代码得到的是 args 被推断为 any)
this._eventHandler.subscribe(onHeaderCellRenderedHandler, (_e, args) => {
const column = args.column;
const node = args.node;
});
因此,正如我在问题中提到的那样,为了使其起作用,我需要推断第一个参数并以某种方式创建一个可供第二个参数使用的别名。最新版本的 TypeScript 可以做到吗?
【问题讨论】:
-
请提供可重现的例子
标签: typescript typescript-generics typescript3.0