If you are using Typescript before the 2.4 release, there is a way to achieve that with enums by casting the values of your enum to any
.
An example of your first implementation
enum Type {
NEW = <any>"NEW",
OLD = <any>"OLD",
}
interface Thing { type: Type }
let thing:Thing = JSON.parse('{"type": "NEW"}');
alert(thing.type == Type.NEW); // true
Typescript 2.4 has built in support for string enums already, so the cast to any
would be no longer necessary and you could achieve it without the use of String Literal Union Type
, which is ok for validation and autocomplete, but not so good for readability and refactoring, depending on the usage scenario.