Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Initialize empty object in typescript with Record type

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

like image 402
ridermansb Avatar asked Mar 29 '26 20:03

ridermansb


1 Answers

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

like image 181
GBra 4.669 Avatar answered Apr 02 '26 03:04

GBra 4.669



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!