如何通过引用类创建包含类名称的类型

时间:2019-11-15 19:14:23

标签: typescript

如何创建一个包含一组类的类名的打字稿类型?

示例:

Class A { }
Class B { }

// I would like a type that contains the name of the classes, e.g. "A"|"B"
// My naive attempt:
type ClassNamesT = A.name | B.name
// ...fails with ts 2702 error: "'A' only refers to a type, but is being used as a namespace here."

我当然可以手工完成,例如type ClassNamesT = "A" | "B",但是如果不存在名称为“ A”或“ B”的类,我想打字对我大喊。

一些背景-我正在尝试做的事情:

我有不同的“事件”类,可以将其发送给nodejs事件系统。事件的名称等于事件类的名称。例如。 UserCreated类将发送一个'UserCreated'事件。我在运行时通过this.constructor.name

从事件类中获取事件名称。

现在,我希望我的订阅者是“类型安全”的,并且只能收听现有事件,或者对我大喊打字稿,例如:

  • eventbus.on("UserCreated")好!
  • eventbus.on("NonExisting class")应该失败!

我当时想我可以通过创建带有事件类名称的类型来实现此目的,如示例中所示,然后让eventbus.on函数仅接受该类型的参数。

btw:我是打字稿新手。

0 个答案:

没有答案
相关问题