我正在使用 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 实现方式的问题?如何在保留命名接口的同时解决此问题?
您可以使用:
type PubSubEvents = {
CHANGE_EVENT: string;
}
或添加显式索引签名:
interface PubSubEvents {
CHANGE_EVENT: string;
[event: string]: unknown;
}
参考资料: