Typescript:忽略事件传递的prop,接受多个prop名称

yzuktlbb  于 2023-04-07  发布在  TypeScript
关注(0)|答案(1)|浏览(110)

我有一个应用程序,它有很多模态。我写了一个fn,它将每个模态Map到打开和关闭的fns,所以我得到了这样的语法:

open.modalname(timeout, callback, props)

我使用的是react,在某些情况下,我将open fn传递给onClick回调函数,它会注入一个事件,而我对此毫无用处,因此我有一个助手fn,它会忽略它。
这些是我得到的函数类型

export type Output<T extends Object, F> = Record<keyof T, F>;

export type Open = Output<
  typeof modals,
  (
    timeout?: number | React.MouseEvent<HTMLElement> | object,
    callback?: number | (() => void),
    props?: object | (() => void),
    _?: object | (() => void)
  ) => void
>;

export type Close = Output<typeof modals, () => void>;

我允许在我的助手中使用两种语法:(timeout?,callback:?,props?)或(props?)
有没有一种方法可以写Open类型,这样我就可以得到一个更好的自动完成,但允许所有可能的类型。

(timeout?: number, callback?: () => void, props?: object) | (props?: object)
o2gm4chl

o2gm4chl1#

我真的不知道你想实现什么,但是如果你只是想接受每个函数调用的不同选项,为什么不直接这样做呢:

export interface OpenFn {
  (options?: {
    event?: React.MouseEvent<HTMLElement>,
    timeout?: number,
    callback?: () => void,
    props?: object,
  }): void
}

const open: OpenFn = (options = {}) => {
  const { 
    event,
    timeout,
    callback, 
    props,
  } = options;
  // logic
  // ...
}

相关问题