Два куска кода похожи в том, что они делают. Type.Second
будет содержать номер, связанный с членом перечисления, а type
(при условии, что он набран как Type
) должен содержать член перечисления и, следовательно, должен быть числом во время выполнения. Это означает, что в обоих случаях вы сравниваете числа, просто во втором случае значение является встроенным, а в первом - из-за доступа к элементу объекта.
Теперь с сервера вы не возвращаете числа, но возвращаете имя перечисления, ни один из них не будет работать должным образом.
Также обратите внимание, что, хотя это и не очень хорошая идея, вы можете изменить значения времени выполнения объекта enum, что может привести к неожиданным результатам:
(Type as any)["Second"] = 10
Если вы хотите, чтобы они были одинаковыми (т. Е. Скомпилированный код одинаков в обоих случаях), вы можете использовать const enum
. const enums
не используйте объект времени выполнения, все ссылки на memeer заменяются фактическим значением перечисления:
export const enum Type {
Null,
First,
Second,
Third
}
if (myObject.type === Type.Second) doStuff();
// Compiled to
if (myObject.type === 2 /* Second */)
doStuff