我经常拥有类似这样的字符串字面量类型:
const supportedLanguageTags = [
"de-at",
"de-ch",
"de-de",
"en-gb",
"en-us",
] as const;
type LanguageTag = typeof supportedLanguageTags[number];
function isSupportedLanguageTag(tag: string): tag is LanguageTag {
return (supportedLanguageTags as unknown as string[]).includes(tag);
}
我在这里使用数组来定义类型,同时也为了能够检查随机字符串是否包含在字面类型中。
但是,我真的不喜欢类型断言。你有什么建议来摆脱它吗?
一个解决方案是使用对象而不是数组,像这样:
const supportedLanguageTags = {
"de-at": 1,
"de-ch": 1,
"de-de": 1,
"en-gb": 1,
"en-us": 1,
};
type LanguageTag = keyof typeof supportedLanguageTags;
function isSupportedLanguageTag(tag: string): tag is LanguageTag {
return tag in supportedLanguageTags;
}
但是我不喜欢为每个对象属性定义一个随机值。
supportedLanguageTags
扩展为readonly string[]
而不需要进行类型断言,并且需要声明一个新变量的成本...就像 这样。如果符合您的要求,我很乐意撰写答案。如果不行,请详细介绍问题所在。此外,这个问答是否解决了您的问题? - jcalzreadonly string[]
已经是一种改进了,所以请随意发布一个答案。 - Krisztián Balla