Enum
An enum may give you additional benefits, if you want the features:
const enum FieldNamesEnum {
FirstField = "Field One",
SecondField = "Field Two"
};
let x: FieldNamesEnum;
x = FieldNamesEnum.FirstField;
x = FieldNamesEnum.SecondField;
// Error - not assignable to FieldNames
x = 'str';
// Cannot assign
FieldNamesEnum.FirstField = 'str';
Importantly, you can’t assign to the enum members and types are checked to the enum members, rather than string.
Additionally, because you have used a const enum in your example, the enum won’t exist at runtime and all the references will be substituted for the literal values (if you used a plain enum the enum would exist at runtime).
Object
Compare this to the object example:
const FieldNames = {
FirstField: "Field One",
SecondField: "Field Two"
};
let y: string;
y = FieldNames.FirstField;
y = FieldNames.SecondField;
// Oops it works
y = 'str';
// Oops it works
FieldNames.FirstField = 'str';
Union
If you don’t need the full enum, but want to limit the values, you can use a union of literal values:
type FieldNames = "Field One" | "Field Two";
let x: FieldNames;
x = "Field One";
x = "Field Two";
// Error - not allowed
x = "Field Three";