有没有办法循环TypeScript字符串文字的值?
type category = "foo" | "bar" | "baz" | "xyzzy"
for (c in category) {
// ... do something with each category
}
我目前有这样的事情:
let cat: category = ...
switch (cat) {
case "foo":
default:
process("foo")
break
case "bar":
process("bar")
break
case "baz":
process("baz")
break
case "xyzzy":
process("xyzzy")
break
}
但我宁愿使用像
这样的东西let others: category = []
for (c in category) { // Iterate over possible category values
if (c !== "foo") others.push(c)
}
if (others.indexOf(cat) >= 0) {
process(cat)
} else {
process("foo")
}
答案 0 :(得分:13)
使用typescript 2.1和keyof type,可以反过来做 - 你可以使用必要的键定义一个对象,并使用keyof
得到所有键的联合类型:
let categoryKeys = {foo: '', bar: '', baz: '', xyzzy: ''}; // values do not matter
type category = keyof typeof categoryKeys;
let x: category = 'foo'; // ok
let z: category = 'z'; // error TS2322: Type '"z"' is not assignable
// to type '"foo" | "bar" | "baz" | "xyzzy"'.
console.log(Object.keys(categoryKeys)); // prints [ 'foo', 'bar', 'baz', 'xyzzy' ]
答案 1 :(得分:4)
这是类型声明。
type category = "foo" | "bar" | "baz" | "xyzzy"
TypeScript转换为没有类型的JavaScript。 键入TypeScript只是关于可能的某些值(在这种情况下)的转换器的信息。并且类型声明不会编译到任何实际的运行时JavaScript对象中。 因此,您无法遍历它,但您可以在交换机构造中使用它。