Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript基于联合类型创建具有键的类型_Typescript_Typescript Typings - Fatal编程技术网

Typescript基于联合类型创建具有键的类型

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]:

我有一个translation对象,它可以具有对应于字符串可能被翻译的所有语言的键,并且值是翻译后的字符串,如下所示:

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>