javascript - 如何使用 TypeScript 为多个函数重用函数签名

标签 javascript typescript

考虑以下代码:

type TCallBack = () => void

const subscriptions: { [key: string]: TCallBack[] } = {}

interface ISubscription {
  eventName: string
  callback: TCallBack
}

export function unsubscribe({ eventName, callback }: ISubscription) {
  // ...
}

export function subscribe({ eventName, callback }: ISubscription) {
  // ...
}

export function subscribeOnce({ eventName, callback }: ISubscription) {
  // ...
}

函数签名{ eventName,callback }: ISubscription用于多个函数。有没有办法避免复制此签名但重复使用它?我想像下面这样的东西会很棒:

const functionSignature = { eventName, callback }: ISubscription
export function subscribe(functionSignature ) {

但这当然行不通。感谢您的帮助。

最佳答案

是的, 您可以为您的函数定义一个类型,如下所示:


type EventCallBack = () => void

export type SubscribeFunction = (subscription: Subscription) => void

export interface Subscription {
  eventName: string
  callback: EventCallBack
}


export const unsubscribe: SubscribeFunction = ({ eventName, callback }) => {}

...

如果你走这条路,我建议:

  • 导出 SubscribeFunctionSubscription 类型,以便模块的使用者可以正确引用这些类型
  • 为您的类型使用更有意义、面向领域的名称,以更好地反射(reflect)其用途;我使用了 EventCallback 而不是 TCallback,并从您的界面中删除了无用的 I 前缀。

关于javascript - 如何使用 TypeScript 为多个函数重用函数签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63408946/

相关文章:

javascript - 在 Create React App 中为节点模块添加自定义 Typescript 类型声明

javascript - TS4060 : Return type of exported function has or is using private name 'class'

javascript - 如何重定向 "Desktop Desktop"?

javascript - IE8 DOM 转换 XML 并从 jQuery find() 或 filter() 返回任何内容

javascript - jquery ajax 调用返回一个错误,readystate 4,status 200,statustext ok

javascript - 如何在 Typescript 和 Angular 2 中使用 "@input set"检索数据?

jquery - webpack 无法加载模块 jquery

Angular 2 中的 JavaScript 堆内存不足

javascript - 如何使用 MERN 堆栈构建动态单页 Web 应用程序?

Angular 6 - 无法解析 AppComponent 的所有参数