Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在typescript中获取数字文字类型值_Typescript_Types - Fatal编程技术网

在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 => {
请看[文字类型的官方文档]。()