JSFiddle - React, Tailwind, and code Playground
TypeScript
interface IStringPropertySpecification {
type: PROPERTIES_TYPES.STRING;
required: boolean;
nullable?: boolean;
newName?: string;
emptyStringIsAllowed: boolean;
allowedValues?: Array<string>;
invalidValueSubstitution: string;
defaultValue?: string;
}
interface IObjectDataSpecification__StringKeys {
nameForLogging: string;
properties: {
[propertyName: string]: IStringPropertySpecification;
};
}
interface IObjectDataSpecification__NumberKeys {
nameForLogging: string;
properties: {
[propertyName: number]: IStringPropertySpecification;
};
}
type ObjectDataSpecification = IObjectDataSpecification__StringKeys | IObjectDataSpecification__NumberKeys;
enum PROPERTIES_TYPES {
NUMBER = "NUMBER",
STRING = "STRING"
// ETC.
}
const dataSpecification: ObjectDataSpecification = {
nameForLogging: "Test",
properties: {
foo: "asdfsadffsd" // Valid!!!
}
};
console.log(dataSpecification);