Apollo 服务器 PubSub 实现中的 TypeScript 泛型问题

问题描述 投票:0回答:1

我正在使用 TypeScript 和用于事件处理的 PubSub 类在 Apollo Server 中实现订阅。但是,我在尝试使用 PubSub 泛型类型的命名接口时遇到了问题。

使用命名接口时,遇到以下错误:

interface PubSubEvents {
  CHANGE_EVENT: string;
}

export interface Context {
  pubsub: PubSub<PubSubEvents>; 
  // Error: Type 'PubSubEvents' does not satisfy the constraint '{ [event: string]: unknown; }'.
}

有趣的是,使用内联类型定义时相同的代码可以正常工作:

export interface Context {
  pubsub: PubSub<{
    CHANGE_EVENT: string;
  }>;
}

为什么内联类型定义可以工作,但命名的 PubSubEvents 接口却失败?这是 TypeScript 类型系统的限制还是 PubSub 实现方式的问题?如何在保留命名接口的同时解决此问题?

typescript generics publish-subscribe apollo-server
1个回答
0
投票

您可以使用:

type PubSubEvents = {
  CHANGE_EVENT: string;
}

或添加显式索引签名:

interface PubSubEvents {
  CHANGE_EVENT: string;

  [event: string]: unknown;
}

参考资料:

© www.soinside.com 2019 - 2024. All rights reserved.