在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', ..>有效含义也是如此这意味着您的默认值对任何传入的都无效listenerspropK

您可以使用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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在构造函数中初始化静态泛型列表

来自分类Dev

如何在Rust中初始化泛型变量

来自分类Dev

如何在Swift中定义初始化泛型类型

来自分类Dev

在泛型类中实例化 Java 泛型类

来自分类Dev

泛型方法和泛型类中的类型推断

来自分类Dev

类中的getConstructors()中的泛型类型

来自分类Dev

C#如何使用类型为“类型”的对象初始化泛型类

来自分类Dev

C#如何使用类型为“类型”的对象初始化泛型类

来自分类Dev

Typescript推断泛型中的泛型

来自分类Dev

如何在 TypeScript 中实例化泛型类型?

来自分类Dev

泛型类不调用重写的初始化程序

来自分类Dev

从泛型类继承初始化程序

来自分类Dev

泛型类不调用重写的初始化器

来自分类Dev

类声明中的泛型类型

来自分类Dev

java类中的多个泛型类型

来自分类Dev

如何在TypeScript中使用泛型类型初始化对象?

来自分类Dev

Typescript中的默认泛型类型派生

来自分类Dev

TypeScript中泛型的深度条件类型

来自分类Dev

TypeScript 中的泛型类型继承

来自分类Dev

在Dart中实例化泛型类

来自分类Dev

在Dart中实例化泛型类

来自分类Dev

java数组泛型初始化

来自分类Dev

无法初始化嵌套泛型

来自分类Dev

泛型中的类型安全

来自分类Dev

Action中的泛型类型?

来自分类Dev

reactjs中的泛型类型

来自分类Dev

Scala中的泛型类型

来自分类Dev

动作中的泛型类型?

来自分类Dev

C ++中的泛型类