在typescript中获取数字文字类型值
我想用类型来更清楚地建模我的域,而不是使用幻数,但是下面的代码似乎没有按照我期望的方式工作。有没有正确的方法使用类型来实现这一点,还是应该使用枚举在typescript中获取数字文字类型值,typescript,types,Typescript,Types,我想用类型来更清楚地建模我的域,而不是使用幻数,但是下面的代码似乎没有按照我期望的方式工作。有没有正确的方法使用类型来实现这一点,还是应该使用枚举 type Down = -1; type Up = 1; type Direction = Up | Down const go = (pos: number, dir: Direction): number => { if (dir instanceof Up) { console.log("going up"); }
type Down = -1;
type Up = 1;
type Direction = Up | Down
const go = (pos: number, dir: Direction): number => {
if (dir instanceof Up) {
console.log("going up");
}
if (dir === Down) {
console.log("going down");
}
return pos + Up;
};
console.log(go(Up))
给我
“Up”仅指类型,但在此处用作值。
instanceof表达式的左侧必须是any类型、对象类型或类型参数。
在这种情况下,我将使用枚举
枚举方向{
Up=1,
向下=-1,
}
常量go=(位置:编号,方向:方向):编号=>{
if(dir==方向向上){
控制台日志(“上升”);
}else if(dir==Direction.Down){
控制台日志(“下降”);
}
返回位置+方向向上;
};
不能在需要值的地方使用类型。类型在编译期间被擦除,因此在运行时没有任何可添加或比较的内容
您可以使用枚举,但也可以使用文字类型,方法是从值开始并从中派生类型:
const Direction = {
Up: 1,
Down: -1
} as const
type Direction = typeof Direction[keyof typeof Direction]
const go = (pos: number, dir: Direction): number => {
if (dir == Direction.Up) {
console.log("going up");
}
if (dir == Direction.Down) {
console.log("going down");
}
return pos + Direction.Up;
};
console.log(go(0, Direction.Up))
不使用Typescript中内置的文字类型系统正在失败。你就快到了。只需将前两行中的type
替换为const
:
const Down = -1;
const Up = 1;
type Direction = Up | Down
如果不需要引用代码中的常量,则可以通过将方向
类型内联到函数声明中,使其更加紧凑和可读:
const go = (pos: number, dir: -1|1): number => {
请看[文字类型的官方文档]。()