在函数签名中将对象值用于TypeScript键入

时间:2019-04-23 20:05:52

标签: javascript node.js typescript

我们已经在代码库的const中定义了一些枚举值,如下所示:

const Templates = {
    NewMessageFromBot: 'new_message_from_bot,
    NewMessageFromHuman: 'new_message_from_human',
    NewUnreadNotification: 'new_unread_notification',
}

(示例被有意地简化了,但是实际上,对于我们用于消息的不同HTML模板,它实际上包含了近100个条目。)

我们要使用这些名称作为

之类的函数的类型
function getTemplateName(message: MessageDocument, templateName: Templates) { ... }

但是我们当然会得到Templates' refers to a value, but is being used as a type here.ts(2749)

是否有任何方法可以将 Templates 对象用作一种类型,还是需要将其重构为 Enum ,还是有人有什么好的建议?提前致谢!

我尝试通过搜索“在TypeScript中将对象重用为类型”来搜索相似的主题,但实际上看来我需要在这里做一些高级的事情,或者只是重构。

function getTemplateName(message: MessageDocument, templateName: Templates) { ... }

1 个答案:

答案 0 :(得分:1)

您可以使用String Enums,解决方案是:

enum Templates = {
    NewMessageFromBot = 'new_message_from_bot,
    NewMessageFromHuman = 'new_message_from_human',
    NewUnreadNotification = 'new_unread_notification',
}

您可以使用Enum作为类型,并获取字符串。

如果您想看一眼,这里有一些info