考虑以下代码:
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 }) => {}
...
如果你走这条路,我建议:
- 导出
SubscribeFunction
和Subscription
类型,以便模块的使用者可以正确引用这些类型 - 为您的类型使用更有意义、面向领域的名称,以更好地反射(reflect)其用途;我使用了
EventCallback
而不是TCallback
,并从您的界面中删除了无用的 I 前缀。
关于javascript - 如何使用 TypeScript 为多个函数重用函数签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63408946/