javascript - 如何将字符串数组转换为 typescript 类型?

标签 javascript typescript

我有这个数组:

const arr = ["foo", "bar", "loo"]

我需要将它转换为 typescript 类型

type arrTyp = "foo" | "bar" | "loo";

我如何在 typescript 中做到这一点?

最佳答案

为 3.4 及更高版本编辑:

在 3.4 const assertions添加了,所以我们可以使用 as const 得到一个字符串字面量类型的元组:

const arr = ["foo", "bar", "loo"] as const

type arrTyp = typeof arr[number]; // "foo" | "bar" | "loo"

原创

问题是arr没有保留数组中的文字类型,它会被推断为string[]。如果您使用函数来强制推断字符串文字类型,则提取类型是一件简单的事情:

function tuple<T extends string[]>(...o: T) {
    return o;
}
const arr = tuple("foo", "bar", "loo")

type arrTyp = typeof arr[number]; // "foo" | "bar" | "loo"

该函数强制编译器为 arr 推断字符串文字的元组。所以 arr 将被键入为 ["foo", "bar", "loo"]。然后我们可以使用类型查询来获取元组中元素的并集。您可以阅读有关类型查询的更多信息 here

关于javascript - 如何将字符串数组转换为 typescript 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54070785/

相关文章:

javascript - WebSocketGateway 中的 WsException 不起作用

javascript - 如何禁止用户从当前时间选择 future 时间?

javascript - VSCode Intellisense 奇怪的 Javascript 代码自动补全

javascript - 为什么所有 redux reducer 函数都在运行时执行?

javascript - Chrome 上的 toggleSlide 问题 - 切割字母/不可见文本

typescript - FullCalendar-vue + typescript : Property 'getApi' does not exist

typescript - 在 Typescript 中隐式创建一个元组

javascript - 在 JS for 循环中对记录进行排序

javascript - 如何在 Angular Material 中固定 mat-select-panel 的位置

typescript - TypeError: book.isEqual 不是一个函数