2016-09-10 2 views
1

У меня есть следующий ...Как получить доступ к машинописи Enum порядкового

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

Но это бросает

ошибки TS2322: Тип «строка» не может быть назначен для типа «NubDirection».

+0

что 'nub', недостающую информацию. –

+0

Должно быть очевидно, но я добавлю его ... – Jackie

+0

сейчас, не было до первого редактирования –

ответ

4

Когда вы заявляете, что-то типа NubDirection, то это на самом деле номер:

var a = NubDirection.INWARD; 
console.log(a === 1); // true 

При доступе к перечислению с помощью порядковых вы получите обратно строки и не число, а из-за того, что вы не может назначить его тому, что было объявлено как NubDirection.

Вы можете сделать:

nub.direction = NubDirection[NubDirection[index]]; 

Причина этого заключается в том, что нет такого понятия, как перечисление в JavaScript, и способ машинопись подражает перечисления, делая это при составлении его ЯША:

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; 
Смежные вопросы