Как определить условный / динамический c тип значения потока объекта js? - PullRequest
2 голосов
/ 19 марта 2020

У меня есть вопрос об определении типа значения динамического c объекта в потоке. Позвольте мне взять пример:

Допустим, у меня есть массив с несколькими объектами:

const data = [
    {
        type: 'dog',
        value: {
            bark: 'bark'
        }
    },
    {
        type: 'cat',
        value: {
            meow: 'meow'
        }
    }
]

Итак, идея заключается в том, что у каждого объекта есть тип, и разные типы будут иметь разные значения. И я пытаюсь определить тип потока для каждого объекта. Это будет:

type DogValueType = {
    bark: string
}

type CatValueType = {
    meow: string
}

type DataType = {
    type: string,
    value: DogValueType | CatValueType
}

const data: Array<DataType> = [
    {
        type: 'dog',
        value: {
            bark: 'bark'
        }
    },
    {
        type: 'cat',
        value: {
            meow: 'meow'
        }
    }
]

В этом простом случае Flow может быть достаточно умен, чтобы выбрать правильный тип значения. Однако, если тип значения более сложный, Flow может не выбрать правильный тип. Поэтому мне интересно, можно ли определить условный тип? Я думаю, что-то вроде (синтаксис определенно неправильный, я просто пытаюсь объяснить свою мысль):

type DataType = {
    type: string,
    value: type === 'dog' ? DogValueType : CatValueType
}

Если это невозможно, вы думаете, что я не должен смешивать разные значения введите в этом случае или какова лучшая структура, чтобы сделать трюк?

Любое предложение очень приветствуется. Спасибо!

...