我有一个供我的组织内的客户端应用程序使用的库。 我正在将一些共享代码移至库中。 该共享代码是一个名为
publishEvent
的事件发布方法。 publishEvent
接受一个对象和一个事件名称。 名称could是一个字符串,但我不想要这样。 为了在应用程序代码中支持智能感知,我希望它成为一个联合,但该联合只能由应用程序真正定义。
所以签名是这样的:
publishEvent(event: unknown, eventName: EventName): Promise<void>
库需要声明类型,因为它需要它来支持
publishEvent
签名,但只有应用程序才能真正知道有效事件名称的字符串集。 我尝试了多种方法,包括命名空间、模块增强等,但我无法找出真正可行的方法。
牢记以下目标:
有什么方法对我有用吗? 这不像仿制药会有所帮助,但也许我错了。
图书馆:
// 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
}