Typescript基于联合类型创建具有键的类型
我有一个translation对象,它可以具有对应于字符串可能被翻译的所有语言的键,并且值是翻译后的字符串,如下所示:Typescript基于联合类型创建具有键的类型,typescript,typescript-typings,Typescript,Typescript Typings,我有一个translation对象,它可以具有对应于字符串可能被翻译的所有语言的键,并且值是翻译后的字符串,如下所示: const trans = { en: "Hello, how is it going?", de: "Hallo, wie gehts?", da: "Hej, hvordan går det?" } 我当前正在按如下方式键入对象: type TransType = { [key: string]:
const trans = {
en: "Hello, how is it going?",
de: "Hallo, wie gehts?",
da: "Hej, hvordan går det?"
}
我当前正在按如下方式键入对象:
type TransType = {
[key: string]: string;
}
但我在其他地方也使用了一种联合类型来控制可以实现哪些语言:
type Languages = "en" | "de" | "da";
如何将这两个键组合在一起,并根据语言联合类型控制trans对象中可以使用哪些键?您可以为此()使用映射类型: 或者,正如rshepp所提到的,您可以使用
记录
实用程序类型(,),它将定义相同的映射类型:
type TransType = Record<Languages, string>
type TransType=记录
您还可以声明
type TransType=Record
或使用Record
并有效地获得相同的结果。非常好!我确实查看了文档中的映射类型,但理解错误,无法使其工作,但您的示例为我澄清了这一点。@rshepp Good call,将其添加到了答案中。我如何才能使我的对象没有联合类型中的所有类型,但是,在仍然确保对象中的键都在联合类型中表示的情况下?如果我从上面的对象中删除“da”,编译器将告诉我再次添加它。我希望它是可选的。您可以使用?
将映射类型的属性设置为可选:type TransType={[key in Languages]?:string}
。
type TransType = Record<Languages, string>