I want to define an object type where the property names are pre-defined, but also optional.
I want to create the equivalent of the below longer syntax, but is there a way to make it dynamic with optional properties so I could easily add / remove those options?
interface List {
one?: string;
two?: string;
three?: string;
}
I'm trying to find a way to make the following invalid code work.
type options = 'one' | 'two' | 'three';
type List = Record<options, string>;
// Valid
const MyObjOne: List = {
one: 'Value 1',
two: 'Value 2',
three: 'Value 3',
}
// Invalid
const MyObjTwo: List = {
one: 'Value 1',
two: 'Value 2',
}
But TypeScript gives this error for MyObj
TS Playground link
Property 'three' is missing in type '{ one: string; two: string; }' but required in type 'List'.
Use the utility type Partial
:
type List = Partial<Record<options, string>>;