Javascript 在流中扩展对象类型并覆盖属性

Javascript 在流中扩展对象类型并覆盖属性,javascript,typescript,flowtype,flow-typed,Javascript,Typescript,Flowtype,Flow Typed,在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 '

在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'
}
接口MyObj{
a:‘foo’|‘bar’
}
接口MyExtObj扩展了Pick{
a:MyObj['a']|'baz'
}
常量测试:MyExtObj={
答:'baz'//很好用,还有'foo'和'bar'
}
是否可以使用流对象类型执行此操作?如果可以,如何执行?以下示例失败

/* @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 ...
}
/*@flow*/
类型MyObj={
a:‘foo’|‘bar’
}
类型MyExtObj=MyObj&{
a:$PropertyType |‘baz’
}
常量测试:MyExtObj={
a:'baz'//无法分配对象文字等等。。。
}
像这样吗

/* @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 ...
}
/*@flow*/
类型MyObj={|
a:‘foo’|‘bar’
|}
MyExtObj类型={|
…MyObj,
a:$PropertyType |‘baz’
|}
常量测试:MyExtObj={
a:'baz'//无法分配对象文字等等。。。
}
如果出于某种原因不想使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 ...
}
/*@flow*/
类型MyObj={
a:‘foo’|‘bar’
}
MyExtObj类型={|
…准确地说,
a:$PropertyType |‘baz’
|}
常量测试:MyExtObj={
a:'baz'//无法分配对象文字等等。。。
}