如何在typescript中迭代字符串文字类型

如何在typescript中迭代字符串文字类型,typescript,enums,Typescript,Enums,如何在typescript中迭代字符串文字类型 例如,我定义了这个类型 type Name = "Bill Gates" | "Steve Jobs" | "Linus Torvalds"; 我想这样迭代 for (let name of Name) { console.log("Possible name: " + name); } 或者这在typescript中是不可能的?AFAIK无法将字符串联合(type)提升到运行时JS(value) 我找到的最接近的解决方案是使用enum

如何在typescript中迭代字符串文字类型

例如,我定义了这个类型

type Name = "Bill Gates" | "Steve Jobs" | "Linus Torvalds";
我想这样迭代

for (let name of Name) {
    console.log("Possible name: " + name);
}
或者这在typescript中是不可能的?

AFAIK无法将字符串联合(type)提升到运行时JS(value)


我找到的最接近的解决方案是使用
enum
:/。

因为TypeScript只是一个编译器,所以在运行时没有任何类型信息。这意味着不幸的是,您无法遍历类型


根据您尝试执行的操作,您可以使用枚举存储名称索引,然后在数组中检索这些索引。

自typescript 2.4以来,可以使用字符串类型的枚举。可以轻松迭代这些枚举:

您可以定义一个数组文字,而不是按照OP请求迭代字符串文字类型的(并集),如果将
标记为const
,则条目的类型将是字符串文字类型的并集

由于typescript 3.4,您可以在文本表达式上定义常量断言来标记: -该表达式中的任何文字类型都不应加宽(例如,从“hello”到string) -数组文字变为只读元组

例如:

const names = ["Bill Gates", "Steve Jobs", "Linus Torvalds"] as const;
type Names = typeof names[number];
const companies = {
    "Bill Gates" : "Microsoft",
    "Steve Jobs" : "Apple",
    "Linus Torvalds" : "Linux",
} as const;

for(const n of names) {
    console.log(n, companies[n]);
}
const bg : Names = 'Bill Gates';
const ms = companies[bg];
它可以在运行时使用,也可以检查类型,例如:

const names = ["Bill Gates", "Steve Jobs", "Linus Torvalds"] as const;
type Names = typeof names[number];
const companies = {
    "Bill Gates" : "Microsoft",
    "Steve Jobs" : "Apple",
    "Linus Torvalds" : "Linux",
} as const;

for(const n of names) {
    console.log(n, companies[n]);
}
const bg : Names = 'Bill Gates';
const ms = companies[bg];


不能使用联合类型。但您可以使用枚举执行此操作:

enum Name {
  'Bill Gates' = 'Bill Gates',
  'Steve Jobs' = 'Steve Jobs',
  'Linus Torvalds' = 'Linus Torvalds'
}

for (const name of Object.keys(Name)) {
  console.log('Possible name: ' + name)
}

不可能(另请参见:有用的答案,但数组不应该使用逗号而不是
|
?如果需要定义函数签名的类型,您仍然需要定义一个,对吗?我在代码中得到了类似的结果:
导出类型SortDirection='ASC'|'DESC'导出常量SortDirection=['ASC','DESC']as const
修复了输入错误,谢谢。如果您需要联合类型,可以使用
typeof
找到它,如图所示。非常好,谢谢!您是否有一个文档链接,其中讨论了
typeof names[number]
语法?这对我来说是新的。如果您分割数组,它将成为联合类型的数组:
const n=[…名称];
从中可以获取
typeof
一个条目:
typenames=typeof n[0]
因此语法
typeof names[number]
似乎是上述语法的简写。我发现了语法
typeof names[number]
昨天的回答应该是可以接受的。这是你能得到的最接近的答案,而且非常简单。枚举对我来说太冗长了