Вам нужно сделать два разных интерфейса под каждый вариант. При этом поле type будет иметь не тип string, а конкретно "bigCard" в одном случае и "smallCard" в другом. Пример:
interface BigCard {
type: 'bigCard';
bigCardProp: string;
}
interface SmallCard {
type: 'smallCard';
smallCardProp: number;
}
При этом на стороне потребителя входной параметр типизируется как BigCard | SmallCard:
function MyComponent(prop: { card: BigCard | SmallCard })
Это также добавит дополнительную проверку того, что в type указано конкретно либо "bigCard" либо "smallCard", а не какая-то произвольная строка.