这是我想要完成的事情:
const names = ["foo", "bar", "baz"];
type NameType = elementof names; // this is not valid typescript
行为与此相同。
type NameType = "foo" | "bar" | "baz";
解决方案需要完成一些事情。
打字稿可以这样做吗?
注意:这与Convert string[] literal to string type literal不同,因为该问题并不需要特定排序的字符串序列。联盟类型不会产生任何在运行时获取订单信息的方式。
答案 0 :(得分:2)
您可以使用类型查询获取项目类型:
type NameType = typeof names[number];
问题是names
的类型是string[]
所以上面的代码只生成string
您可以使用辅助函数推断const
的字符串文字类型。
function array<T extends string>(p: T[]) : T[] {
return p
}
const names = array(["foo", "bar", "baz"]);
type NameType = typeof names[number]; // same as "foo" | "bar" | "baz"