想要把字符串数组转换为字符串字面量联结类型,能够先应用as const关键字定义只读字符串数组,而后对数组中的全副值应用typeof操作符。

// 只读的字符串数组const namesArr = ["John", "Lily", "Roy"] as const;// 把数组转换为字符串字面量联结类型type Names = typeof namesArr[number]; // "John" | "Lily" | "Roy"

这可能须要一些工夫去了解产生了什么。因而让我带你一步一步地剖析:
第一步,初始化字符串数组

// 字符串数组const namesArr = ["John", "Lily", "Roy"];

咱们的指标是把它转换为字符串字面量联结类型
接着,在TypeScript中必须应用as const关键字能力把数组转换为只读的在各个方面都是常量的数组。
就像这样做:

// 只读的字符串数组const namesArr = ["John", "Lily", "Roy"] as const;

把字符串数组转换为只读模式之后,就不能在应用惯例的push, pop, slice等数组办法。它在各个方面都是一个常数
而后,咱们须要把只读的数组转换为字符串字面量联结类型。
为此咱们定义一个叫做Names的新类型,而后对namesArr数组的全副值都是用typeof操作符。
如下所示:

// 只读的字符串数组const namesArr = ["John", "Lily", "Roy"] as const;// 把数组转换为字符串字面量联结类型type Names = typeof namesArr[number]; // "John" | "Lily" | "Roy"

当初你可能会问咱们为什么对namesArr应用number类型,这就是通知TypeScript编译器去获取来自于namesArr的所有编号的索引值,而后通过这些值去创立一个类型。
因而,当TypeScript试图推断namesArr数组中蕴含的所有值的类型时,它将创立一种字符串字面量联结类型,因为数组中的所有值都是常量和只读的。
最初,Names类型将蕴含如下内容:

type Names = "John" | "Lily" | "Roy";

这就是咱们想要的,当初就能够在TypeScript中应用Names类型

How to convert an array into string literal union type in TypeScript?