我有以下几点...

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;

Typescript相关问答推荐

如何将联合文字类型限制为文字类型之一

类型脚本类型字段组合

如何以Angular 形式显示验证错误消息

通配符路径与每条路径一起显示

如何使用WebStorm调试NextJS的TypeScrip服务器端代码?

如何将泛型对象作为返回类型添加到类型脚本中

使用2个泛型类型参数透明地处理函数中的联合类型

声明文件中的类型继承

下载量怎么会超过下载量?

使用条件类型的类型保护

将超类型断言为类型脚本中的泛型参数

基于未定义属性的条件属性

在抽象类属性定义中扩展泛型类型

棱角分明-什么是...接口类型<;T>;扩展函数{new(...args:any[]):t;}...卑鄙?

在TypeScript中,如何通过一系列过滤器缩小类型?

可以';t使用t正确地索引对象;联合;索引类型

Typescript:是否将联合类型传递给重载函数?

递归类型名称

保留泛型类型参数的默认类型

是的,没有获得 headlessui 组合框值