Как сделать, чтобы Typescript подсказывал корректный тип в данном случае?

Допустим, есть некий React-компонент вида:

type Item = {
    title: string;
    name: string;
    isEmpty?: boolean;
}

interface ComponentProps {
    items: Item[]
}

function Component(props: ComponentProps) {}

В массиве items элемент item может быть или только с полями title и name, либо только isEmpty, но не одновременно все три поля.

Как сделать, чтобы Typescript подсказывал типы следующим образом:
1. Если я передаю в items это:
<Component items={[
    {
        title: "some title",
        name: "some name"
    }
]} />

чтобы Typescript не разрешал заполнять поле isEmpty.

2. А если я передаю в items это:
<Component items={[
    {
        isEmpty: true
    }
]} />

то Typescript чтобы не разрешал заполнять title и name.

А если я попытаюсь эти поля указать все вместе, чтобы Typescript выдавал ошибку, что неверный тип.

Догадываюсь, что это можно сделать с помощью маппинга и infer вроде бы. Но как это делается? Подскажите, пожалуйста, как такое достигается.
  • Вопрос задан
  • 368 просмотров
Пригласить эксперта
Ответы на вопрос 1
import React from 'react';


interface Item {
    title: string;
    name: string;
}

interface EmptyItem {
    isEmpty: boolean;
}

interface ComponentProps {
    items: Item[] | EmptyItem[]
}

function Component(props: ComponentProps) {return null}

const comp = <Component items={[
    { title: 'undefined', name: '1', isEmpty: true }
]} />


Тут ключевая проверка
items: Item[] | EmptyItem[]
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы