给定类型
type X = {|
a: number,
b: number,
|};
我希望能够将其任何字段映射到另一种字段。例如,
type Y = {|
a: string,
b: number,
|};
或
type Y = {|
a: number,
b: any,
|};
我尝试了以下内容:
type Overwrite<O: Object, K: $Keys<O>, T> =
{...O, [K]: T}
type X = {|
a: number,
b: number,
|};
type Y = Overwrite<X, 'a', string>;
const y: Y = {
a: '12',
b: 12,
}
乍一看似乎有效,但后来我意识到它也会被b
覆盖,a
可能仍然是number
const y: Y = {
a: 1,
b: '1',
}
有没有办法实现我想要做的事情?
答案 0 :(得分:2)
您可以使用对象传播和确切类型覆盖:
type Overwrite<O, T> =
{...O, ...T}
type X = {|
a: number,
b: number,
|};
type Y = Overwrite<X, {| a: string |}>;
const y: Y = {
a: '12',
b: 12,
}
// $ExpectError
const z: Y = {
a: 1,
b: '1',
}