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

标签 typescript enums

如何在 typescript 中迭代字符串字面量类型?

例如我定义了这个类型

type Name = "Bill Gates" | "Steve Jobs" | "Linus Torvalds";

我想这样迭代

for (let name of Name) {
    console.log("Possible name: " + name);
}

或者这在 typescript 中根本不可能吗?

最佳答案

与其按照 OP 要求迭代(并集)字符串文字类型,不如定义数组文字,如果标记为 as const,则条目的类型将是字符串文字的并集类型。

从 typescript 3.4 开始,你可以在文字表达式上定义 const 断言来标记: - 不应扩大该表达式中的文字类型(例如,不要从“hello”到字符串) - 数组文字变成只读元组

例如:

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];

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

https://microsoft.github.io/TypeScript-New-Handbook/chapters/types-from-extraction/#indexed-access-types

关于typescript - 如何在 typescript 中迭代字符串文字类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43067354/

相关文章:

typescript - 有没有办法在 Typescript 中动态地将键映射到不同类型的 getter/setter?

Angular 2 动画将不起作用

java - 让 Java 代码更加通用

Python:如何从 json 解码枚举类型

json - 使用 AnyObject 初始化 Swift 类?从 NSJSON 序列化

python - 在 Python 2 中按定义顺序迭代枚举

Angular2 拖放目标

angular - 使用模拟数据: Typescript is not assignable to type

Angular 和 typescript : Can't find names - Error: cannot find name

java - 静态枚举与非静态枚举