типы так:
type TagWithKey<TagName extends string, T> = {
[K in keyof T]: { [_ in TagName]: K } & T[K];
};
type BankOrCardPayloadTable = {
bank: { inner: Bank };
card: { inner: Card };
};
type BankOrCardTable = TagWithKey<'_tag', BankOrCardPayloadTable>;
type BankOrCard<T extends keyof BankOrCardTable> = BankOrCardTable[T]['inner'];
type AccountComponentProps<T extends keyof BankOrCardTable> = {
type: T;
account: BankOrCard<T>;
selected: boolean;
onSelect: (account: BankOrCard<T>) => void;
};
и сам компонент соответственно
export const AccountComponent = memo(
<T extends keyof BankOrCardTable>({
type,
account,
onSelect,
selected,
}: AccountComponentProps<T>) => {...}
вопрос, почему ТС не может вывести тип для account при гварде по type?
type === 'card' && account // account тут не конкретный тип!
а если попробовать не деструктуризировать пропсы? а проверять как props.type === ....
Только хотел про это написать
Хотя здесь кажется нужен юнион типов, так как type никак не связан с BankOrCard
Обсуждают сегодня