假设我有歧视工会的经典例子:
interface Circle {
type: 'circle';
radius: number;
}
interface Square {
type: 'square';
width: number;
}
type Shape = Circle | Square;
然后我把它放在开关盒中
switch (shape.type) {
case 'circle':
...
case 'square':
...
}
是否可以使用变量允许我以单一方式引用判别式?
答案 0 :(得分:0)
您可以使用一个枚举。在打字稿中,变量仅用作值,而字符串既可以充当变量也可以充当类型(例如'circle')。有关更多信息,请参见Declaration Merging。
但是枚举同时也充当变量和类型,因此在上面的示例中,您可以像这样创建枚举:
enum ShapeType {
Circle = 'circle',
Square = 'square',
}
并相应地替换界面中的类型,例如:
interface Circle {
type: ShapeType.Circle;
radius: number;
}
并引用切换情况下的枚举(例如case ShapeType.Circle:
)
答案 1 :(得分:0)
您可以定义常量。它们的类型将被推断为文字类型。然后,您可以使用typeof
运算符来获取变量的类型:
const circle = 'circle';
const square = 'square';
interface Circle {
type: typeof circle;
radius: number;
}
interface Square {
type: typeof square;
width: number;
}
type Shape = Circle | Square;
declare const shape: Shape;
switch (shape.type) {
case circle:
// ...
case square:
// ...
}