Typescript 文本类型,是否可以在运行时提取值列表

Typescript 文本类型,是否可以在运行时提取值列表,typescript,typing,Typescript,Typing,同样值得检查这个类似的问题(第一次更新的答案) 我想做的是验证xtern.dir是否符合类型方向,而不重复可能的值列表,但我认为无法提取文本类型中的值列表,对吗?如果是这样的话,有什么简洁的方法可以达到同样的效果呢?如果您不介意牺牲一点编译时安全性,那么枚举将在这里工作: enum Direction { North = "north", East = "east", South = "south", West = "west", } let direction

同样值得检查这个类似的问题(第一次更新的答案)


我想做的是验证xtern.dir是否符合类型方向,而不重复可能的值列表,但我认为无法提取文本类型中的值列表,对吗?如果是这样的话,有什么简洁的方法可以达到同样的效果呢?

如果您不介意牺牲一点编译时安全性,那么
枚举将在这里工作:

enum Direction {
    North = "north",
    East = "east",
    South = "south",
    West = "west",
}

let direction1: Direction = Direction.South;      // This works
let direction2: Direction = Direction["south"];   // This also works!
let direction3: Direction = Direction["rubbish"]; // But this returns undefined  
                                                  // rather than a compiler error...

let xtern = JSON.parse(`{"dir":"wrong"}`); 
let isValidDir = Direction.hasOwnProperty(xtern.dir); // Can examine it at runtime

但是,如果您想像现在这样继续使用字符串-文字联合,那么当前唯一的选择就是自己编写验证,并使其与类型定义保持同步。此方法在中演示。

您可以使用
enum
或数组
enum Direction {
    North = "north",
    East = "east",
    South = "south",
    West = "west",
}

let direction1: Direction = Direction.South;      // This works
let direction2: Direction = Direction["south"];   // This also works!
let direction3: Direction = Direction["rubbish"]; // But this returns undefined  
                                                  // rather than a compiler error...

let xtern = JSON.parse(`{"dir":"wrong"}`); 
let isValidDir = Direction.hasOwnProperty(xtern.dir); // Can examine it at runtime