我有一个自动生成的枚举(来自NSwag),它会为我生成以下内容:
export enum Frequency {
Weekly = 1,
Fortnightly = 2,
}
对于我的界面,我想说这是一个必须来自Frequency
的字符串值。我最接近的是:
interface GtmProduct {
dimension6: keyof Frequency;
}
我也尝试dimension6: 'weekly' | 'fortnightly'
无济于事。
在使用中,它看起来像这样:
{ ...
dimension6: Frequency[frequency].toLowerCase() //frequency here will be `Frequency.Weekly`
}
出现以下错误:Type 'string' is not assignable to type '"toString" | "toFixed" | "toExponential" | "toPrecision" | "valueOf" | "toLocaleString"'.
有什么方法可以使用TS 2.9实现我想要的吗?还是应该简单地将其键入为字符串?
答案 0 :(得分:1)
首先-您必须使用keyof typeof Frequency
才能获得“每周”的联合类型| “半月刊”'。请遵循此C strings handling functions以获得更多详细信息。
TS issue 14294
设置GtmProduct
值时,也可以使用类型转换。所以这是最终的解决方案:
type KeyOfFrequencey = keyof typeof Frequency;
interface GtmProduct {
dimension6: KeyOfFrequencey;
}
const toKeyOf = (f: Frequency): KeyOfFrequencey => Frequency[f] as KeyOfFrequencey;
const frequency = Frequency.Weekly
const a: GtmProduct = {
dimension6: toKeyOf(frequency)
}
但是在您的示例中,我看到.toLowerCase()
可能不正确,因为您的Enum键具有大写的属性,并且您将在界面中将其小写。这就是为什么我在示例中删除了小写字母的原因。
如果要使用小写的值,则必须在枚举中也使用小写的键:
enum Frequency {
weekly = 1,
fortnightly = 2,
}
中尝试此示例
答案 1 :(得分:-1)
您要在维度6变量中获取“每周”信息吗? 看看https://www.typescriptlang.org/docs/handbook/enums.html这是您想要的反向映射。