типы так:
                  
                  
                  
                  
                  
                  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
Обсуждают сегодня