I have this interface接口
export interface TriggerType {
'sp:assign-topics:success': _CardGroup[],
'one': string,
'two': number,
}
字符串
然后是这门课。
export class TriggerHelper {
public static trigger(type: keyof TriggerType, data?: TriggerType[typeof type]) {
if (data === undefined) {
data = null;
}
// jQuery(window).trigger(type, data);
window.dispatchEvent(new CustomEvent(type, {detail: data}));
}
public static on(type: keyof TriggerType, callback: (data: TriggerType[typeof type]) => void) {
}
}
型
对于trigger
方法,我希望type
是keyof
接口,值是valueof
接口的相应key
。
我也不想为trigger函数提供泛型参数,原因有两个
- 我不想每次调用
trigger()
时都提供它,因为我希望它是集中的。 on()
函数中也需要它,用于回调数据类型。这样无论谁调用on()
,都会根据他们正在监听的type
准确地知道data
的type
。
我现在所拥有的
TriggerHelper.trigger('one', 43);
TriggerHelper.trigger('two', 'hi');
型
这不是我想要的
1条答案
按热度按时间2hh7jdfx1#
我想在Typescript中实现这一点的唯一方法是使用泛型,我最初并不想使用泛型来避免多次提供泛型参数。
字符串
然而,事实证明,当Typescript可以重写时,泛型也会被推断出来,这在这里很有帮助。所以我不需要一直提供泛型参数,即使它们在方法中定义。@jonrsharpe在评论中也正确地指出了这一点。