如何在typescript中迭代字符串文字类型?
例如我定义了这种类型
type Name = "Bill Gates" | "Steve Jobs" | "Linus Torvalds";
我想像这样迭代
for (let name of Name) {
console.log("Possible name: " + name);
}
或者这在打字稿中根本不可能吗?
答案 0 :(得分:3)
由于TypeScript只是一个编译器,因此运行时不会出现任何类型信息。这意味着,遗憾的是,您无法遍历某个类型。
根据您尝试执行的操作,您可以使用枚举来存储您可以在数组中检索的名称索引。
答案 1 :(得分:3)
由于打字稿2.4,可以使用字符串类型的枚举。这些枚举可以很容易地重复:
https://blogs.msdn.microsoft.com/typescript/2017/06/27/announcing-typescript-2-4/
答案 2 :(得分:2)
AFAIK没有办法提升"字符串union(类型)到运行时JS(值)。
我找到的最接近的解决方案是使用enum
:example / related issue。
答案 3 :(得分:0)
您可以定义数组文字,而不是按照请求的OP迭代字符串文字类型(的联合),并且如果标记为as const
,则条目的类型将是字符串文字类型的并集。
自打字稿3.4起,您可以在文字表达式上定义const断言以标记以下内容: -该表达式中的文字类型均不应扩展(例如,不要从“ hello”到字符串) -数组文字变成只读元组
例如:
const names = ["Bill Gates" | "Steve Jobs" | "Linus Torvalds"] as const;
它可以在运行时使用并检查类型,例如:
const companies = {
"Bill Gates" : "Microsoft",
"Steve Jobs" : "Apple",
"Linus Torvalds" : "Linux",
} as const;
for(const n of names) {
console.log(n, companies[n]);
}
https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-4.html#const-assertions
https://mariusschulz.com/blog/const-assertions-in-literal-expressions-in-typescript
答案 4 :(得分:0)
您不能使用联合类型。但是你可以用枚举来做到这一点:
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)
}