Расширить тип объекта и свойство перезаписи в потоке - PullRequest
1 голос
/ 12 апреля 2019

В TypeScript я могу сделать следующее:

interface MyObj {
    a: 'foo' | 'bar'
}

interface MyExtObj extends Pick<MyObj, Exclude<keyof MyObj, 'a'>> {
    a: MyObj['a'] | 'baz'
}

const test: MyExtObj = {
    a: 'baz' // Works fine, as well as 'foo' and 'bar'
}

Возможно ли это сделать с типами объектов Flow, и если да, то как? Следующий пример терпит неудачу ...

/* @flow */

type MyObj = {
    a: 'foo' | 'bar'
}

type MyExtObj = MyObj & {
    a: $PropertyType<MyObj, 'a'> | 'baz'
}

const test: MyExtObj = {
    a: 'baz' // Cannot assign object literal blah blah ...
}

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Это также работает , если вы по какой-то причине не хотите делать MyObj точным:

/* @flow */

type MyObj = {
    a: 'foo' | 'bar'
}

type MyExtObj = {|
    ...$Exact<MyObj>,
    a: $PropertyType<MyObj, 'a'> | 'baz'
|}

const test: MyExtObj = {
    a: 'baz' // Cannot assign object literal blah blah ...
}
1 голос
/ 13 апреля 2019

Как это?

/* @flow */

type MyObj = {|
    a: 'foo' | 'bar'
|}

type MyExtObj = {|
    ...MyObj,
    a: $PropertyType<MyObj, 'a'> | 'baz'
|}

const test: MyExtObj = {
    a: 'baz' // Cannot assign object literal blah blah ...
}

Вы можете проверить здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...