Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/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 - Fatal编程技术网

如何按序号访问Typescript枚举

如何按序号访问Typescript枚举,typescript,Typescript,我有以下几点 enum NubDirection { OUTWARD, INWARD } ... direction : NubDirection; ... let index = Math.floor(Math.random() * 2) + 1; nub.direction = NubDirection[index]; 但这会使 错误TS2322:类型“string”不可分配给类型“NubDirection” 当您声明某事物的类型为NubDirection时,它实际上是一个数字:

我有以下几点

enum NubDirection {
  OUTWARD,
  INWARD
}
...
direction : NubDirection;
...
let index = Math.floor(Math.random() * 2) + 1;
nub.direction = NubDirection[index];
但这会使

错误TS2322:类型“string”不可分配给类型“NubDirection”


当您声明某事物的类型为
NubDirection
时,它实际上是一个数字:

var a = NubDirection.INWARD;
console.log(a === 1); // true
使用序号访问枚举时,返回的是字符串而不是数字,因此无法将其分配给声明为
NubDirection
的对象

你可以做:

nub.direction = NubDirection[NubDirection[index]];
原因是javascript中没有enum,typescript模仿enum的方式是在将其编译为js时这样做的:

var NubDirection;
(function (NubDirection) {
    NubDirection[NubDirection["OUTWARD"] = 0] = "OUTWARD";
    NubDirection[NubDirection["INWARD"] = 1] = "INWARD";
})(NubDirection || (NubDirection = {}));
所以你最终得到了这个对象:

NubDirection[0] = "OUTWARD";
NubDirection[1] = "INWARD";
NubDirection["OUTWARD"] = 0;
NubDirection["INWARD"] = 1;
您可以使用:

export enum SpaceCargoShipNames {
  Gnat = 'Gnat',
  Orilla = 'Orilla',
  Ambassador = 'Ambassador',
  CarnarvonBay = 'Carnarvon Bay'
}
然后:

let max = Object.keys(SpaceCargoShipNames).length;  //items count
let n = Math.round(Math.random() * max);            //random index
let v = Object.values(SpaceCargoShipNames)[n];      //item
console.log(max, n, v, v.valueOf());                

如果您有这样的字符串枚举:

export enum LookingForEnum {
    Romantic = 'Romantic relationship',
    Casual = 'Casual relationship',
    Friends = 'Friends',
    Fun = 'Fun things to do!'
}
然后


上面的答案没有一个对我有帮助。您可以做的是:

// Do whatever math operation with an index you wish...
...

// Get the the enum string value:
const nextStringedEnum: string = Object.values(NubDirection)[nextIndex];

// Get the typed enum from the string value:
const nextIndex: NubDirection = Object.values(NubDirection).indexOf(nextStringedEnum);
使用以下命令:

Object.values(NubDirection)[index]

什么是
nub
,缺少信息。应该是显而易见的,但我会补充它…现在,在第一次编辑之前,它是不正确的。很抱歉,这会起作用,肯定是一个肮脏的修复-
Object.keys(NubDirection).indexOf(NubDirection[index])-(Object.keys(NubDirection.length/2)
@AntonPegov什么不起作用?对meErrorCode[Object.keys(ErrorCode)[1]]来说似乎是一样的-有效,ErrorCode[ErrorCode[1]]-不有效work@AntonPegov我不确定您使用的
ErrorCode
对象是什么,但以OP为例,这个:
NubDirection[NubDirection[1]]
可以工作。哦,是的,但是如果您在枚举中设置introw='introw',它将停止工作。奇怪的行为…@AntonPegov哦,是的,带有字符串值的枚举工作完全不同。比较两者的js输出,看看编译器在那里做什么。如果你只有字符串“临时关系”,你还能找到索引吗?@Rohmer否,这只适用于
键/值
对。事实证明你可以做
对象.值(LookingForEnum).indexOf('临时关系')
@Rohmer Ok确定。美好的
Object.values(NubDirection)[index]