从打字稿库中增强/替换联合类型

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

我有一个供我的组织内的客户端应用程序使用的库。 我正在将一些共享代码移至库中。 该共享代码是一个名为

publishEvent
的事件发布方法。
publishEvent
接受一个对象和一个事件名称。 名称could是一个字符串,但我不想要这样。 为了在应用程序代码中支持智能感知,我希望它成为一个联合,但该联合只能由应用程序真正定义。

所以签名是这样的:

publishEvent(event: unknown, eventName: EventName): Promise<void>

库需要声明类型,因为它需要它来支持

publishEvent
签名,但只有应用程序才能真正知道有效事件名称的字符串集。 我尝试了多种方法,包括命名空间、模块增强等,但我无法找出真正可行的方法。

牢记以下目标:

  1. 共享库中的通用代码
  2. EventName 定义位于应用程序代码中
  3. 使用应用程序中定义的联合(而不是库)在应用程序代码中提供智能感知/编译时支持。

有什么方法对我有用吗? 这不像仿制药会有所帮助,但也许我错了。

typescript typescript-generics
1个回答
0
投票

图书馆:

// library-namespace.d.ts namespace MyLibrary { type EventName: string; // we don't care in the lib. String is fine. }

应用:

// library-overrides.d.ts namespace MyLibrary { type EventName: 'This' | 'That'; // app-specific event types }

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