I have the following types defined. CurrencyStat and ScoreStat extend Stat.
export interface Stat {
value: number;
change?: number;
}
type Currency = "USD" | "RMB";
export interface CurrencyStat extends Stat {
currency: Currency;
}
export interface ScoreStat extends Stat {
outof: number;
}
Now I am trying to define a component StatDisplay, to display the stat regardless of which Stat type it is. I am getting the following error: Property 'currency' does not exist on type 'Stat | CurrencyStat'. Property 'currency' does not exist on type 'Stat'.ts(2339), even though I am using a union type on the prop stat.
I was these [reading typescript docs][1] that say "If we have a value that is a union type, we can only access members that are common to all types in the union." This explains why a union type might not work here, but now I am having trouble finding a way to make this work.
I know that it would be possible to delete CurrencyStat and just add currency as an optional property on Stat, but there will be more stat types later on and I would like to have them separate if possible.
import { CurrencyStat, ScoreStat, Stat } from "../../../../types/types";
export const StatDisplay = ({
label,
stat,
}: {
label: string;
stat: Stat | CurrencyStat;
}) => {
return (
<div className="flex flex-col items-center">
<div className="flex items-center">
<div className="">{stat?.currency}</div>
<div className="text-2xl font-semibold">{stat.value}</div>
</div>
<div className="">{label}</div>
</div>
);
};