关于typescript:TypeScript-如何把数组转换为字符串字面量联合类型

7次阅读

共计 983 个字符,预计需要花费 3 分钟才能阅读完成。

想要把字符串数组转换为字符串字面量联结类型,能够先应用 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?

正文完
 0