我想使用泛型类型在泛型类中初始化泛型类变量,但我不知道是否有办法做到这一点。
用类型初始化工作正常,但它似乎不适用于泛型。
type EventCallback<I, O> = (event: I) => O;
type ListenerList<K extends string | symbol | number, I, O, V extends EventCallback<I, O>> = {
[T in K]: V[];
};
const test: ListenerList<string, string, string, (event: any) => any> = {}; // Works fine
export default class EventProcesser<
K extends string | symbol | number,
I,
O,
V extends EventCallback<I, O>
> {
private listeners: ListenerList<K, I, O, V> = {}; // Error :(
}
我收到以下错误Type '{}' is not assignable to type 'ListenerList<K, I, O, V>'
。有没有办法做到这一点?
K
可以是字符串文字类型,因此必须具有名为 的属性的EventProcesser<'prop', ..>
有效含义也是如此。这意味着您的默认值对任何传入的都无效。listeners
prop
K
您可以使用Partial
让编译器知道不需要任何属性:
type EventCallback<I, O> = (event: I) => O;
type ListenerList<K extends string | symbol | number, I, O, V extends EventCallback<I, O>> = {
[T in K]: V[];
};
const test: ListenerList<string, string, string, (event: any) => any> = {}; // Works fine
export default class EventProcesser<
K extends string | symbol | number,
I,
O,
V extends EventCallback<I, O>
> {
private listeners: Partial<ListenerList<K, I, O, V>> = {}; // ok
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句