是否可以使用const中的名称在接口中创建函数?我有const,其中包含所有事件名称,我想为SocketIO创建ServerToClientEvents
接口。
我可以写这样的东西,它会工作
interface A {
"funcName": () => void
}
但是我可以在这个接口中创建名称来自FunNames
的函数吗?
export const Events = {
user_updated: "user:updated",
empty: "empty"
}
interface ServerToClientEvents {
Events.empty: () => void;
Events.user_updated: (user: User) => void;
}
2条答案
按热度按时间mwg9r5ms1#
你可以用一个mapped type和一个嵌套的conditional type来测试我们Map的键,看看它是否匹配一个template literal type(所以我们检测是否需要
user
参数):Playground链接
我假设
user_
前缀应该表示函数接受User
对象,给出问题中显示的代码,但是当然您可以根据需要进行调整。使用给定的
Events
常量,该Map类型定义了以下结构:为了便于阅读,可以拆分条件类型:
Playground链接
u5rb5r592#
如果
Events
不是动态的,也许constAssert可以完成这项工作。