How to define and initialize an object that can be empty.
With types
type Plan = 'plan1' | 'plan1';
interface IPlan {
name: string
}
When I tried to initialize an empty object, I'm getting an error
const plans: Record<Plan, Readonly<IPlan> = {}; // **ERROR HERE**
plans.plan1 = {
name: 'Plan #1'
}
Property 'plan1' is missing in type '{}' but required in type 'Record<"plan1", Readonly>'.
Playgro
Simply use the Partial utility type: Partial<Type>
type Plan = 'plan1' | 'plan1';
interface IPlan {
name: string
}
const plans: Partial<Record<Plan, IPlan>> = {}; // no error
plans.plan1 = {
name: 'Plan #1'
}
The downside of this approach is that now all the properties of your interface are optional. But since you want it to instantiate without the required property, that is the only way.
Playground Link
Another idea might be using the Omit utility type: Omit<Type, Keys>
interface Plan {
name: string;
}
type IPlan = Omit<Plan , "name">;
const plans: IPlan = {};
So, again, you can instantiate without the required properties.
Playground Link
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With