我有一个数组:
const arr = ["foo", "bar", "loo"]
我需要将它转换为 TypeScript 类型
type arrTyp = "foo" | "bar" | "loo";
我该如何在typescript中实现这个?
我有一个数组:
const arr = ["foo", "bar", "loo"]
我需要将它转换为 TypeScript 类型
type arrTyp = "foo" | "bar" | "loo";
我该如何在typescript中实现这个?
针对3.4及以上版本进行编辑:
在3.4版本中,添加了const断言,因此我们可以使用as const
来获取一个字符串字面量类型元组:
const arr = ["foo", "bar", "loo"] as const
type arrTyp = typeof arr[number]; // "foo" | "bar" | "loo"
Translated
问题在于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"]
。然后,我们可以使用类型查询来获取元组中元素的联合。您可以在这里了解更多关于类型查询的信息。typeof arr[number]
呢?我以前从未见过这样的内容。arr
现在是一个数组。但arr[number]
又是什么呢? - Wajahath
type
是数据类型吗? - BadPiggie