繁体   English   中英

在Typescript中的泛型类中初始化泛型

[英]Initializing generic type inside generic class in Typescript

我想使用泛型类型在泛型类中初始化泛型类变量,但是我不知道是否有办法做到这一点。

使用类型进行初始化可以很好地工作,但是似乎不适合使用泛型。

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
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM