I have the following type defined:
export type Limited = {
multiple: boolean;
trunk: Limited['multiple'] extends true ? true : false;
};
I want the trunk property to be limited my the multiple property. The current approach makes trunk to always be false.
I can't fathom why is that, and how to fix it.
CodePudding user response:
The type you've written says to do a type calculation based on Limited['multiple']'s type. That type is boolean. Does boolean extend from true? No, it doesn't (true extends from boolean, but not the other way around). As a result, trunk gets the type false.
If you're trying to say that multiple and trunk must either both be true, or both be false, then you'd do that like this:
export type Limited = {
multiple: true;
trunk: true;
} | {
multiple: false;
trunk: false;
}
Or alternatively you could use a generic:
export type Limited<T extends boolean> = {
multiple: T,
trunk: T
}
