#javascript #typescript #flowtype #flow-typed
#javascript #typescript #тип потока #типизированный потоком
Вопрос:
В 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 */
type MyObj = {
a: 'foo' | 'bar'
}
type MyExtObj = MyObj amp; {
a: $PropertyType<MyObj, 'a'> | 'baz'
}
const test: MyExtObj = {
a: 'baz' // Cannot assign object literal blah blah ...
}
Ответ №1:
Нравится это?
/* @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:
Это также работает, если вы по какой-то причине не хотите делать 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 ...
}