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

Javascript 如何将字符串数组转换为typescript类型?,javascript,typescript,Javascript,Typescript,我有一个数组: const arr = ["foo", "bar", "loo"] 我需要把它转换成一个typescript类型 type arrTyp = "foo" | "bar" | "loo"; 如何在typescript中执行此操作?针对3.4及更高版本进行编辑: 在3.4中添加了,因此我们可以使用作为常量来获取字符串文本类型元组: const arr = ["foo", "bar", "loo"] as const type arrTyp = typeof arr[number

我有一个数组:

const arr = ["foo", "bar", "loo"]
我需要把它转换成一个typescript类型

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

如何在typescript中执行此操作?

针对3.4及更高版本进行编辑:

在3.4中添加了,因此我们可以使用
作为常量来获取字符串文本类型元组:

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"
函数元组(…o:T){
返回o;
}
const arr=元组(“foo”、“bar”、“loo”)
类型arrTyp=类型arr[编号];//“foo”|“bar”|“loo”

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

类型是否为数据类型?这可能无法实现,除非TypeScript支持宏。@WongJiaHau是的,不需要宏,只需要一个普通的泛型函数:)它可以工作。你能解释一下arr[号码]的类型吗?我以前从未见过这种情况
arr
现在是一个
数组
。但是什么是arr[number]
@Wajahath添加了一个解释和一个指向Syntax神奇解决方案文档的链接!。希望将来会有一种更自然的方式来做到这一点future@Simon已更新,在3.4中使用了新语法。谢谢你把我的注意力转移到这个答案上