typescript 中的泛型对我来说是相当高级的。但是我设法让它工作起来了
export type Events = {
LOGIN: undefined
NAVIGATION: {
screen: string
}
SUPPORT: {
communication_method: 'chat' | 'email' | 'phone'
}
}
export function trackEvent<K extends keyof Events>(eventName: K, eventValues: Events[K]) {
if (Platform.OS === 'web') return
logEvent(eventName, eventValues ?? {})
}
trackEvent('LOGIN', undefined) // no TS error
// is there a way to make this work with just trackEvent('LOGIN')
trackEvent('SUPPORT') // 👍 TS error because missing 2nd argument
trackEvent('SUPPORT', { communication_method: 'chat' }) // TS helps writing this
但是想知道是否有一种方法可以使这个工作,只有trackEvent('LOGIN')
没有错误和trackEvent('SUPPORT')
有错误?
1条答案
按热度按时间snvhrwxg1#
我们可以使用一个 *rest参数 *。如果
Events[K]
的类型是undefined
,则rest参数的类型求值为空元组。空元组禁止向函数传递其他参数。如果您仍然希望能够提供undefined
,则可以选择将其替换为[undefined?]
。Playground