将对象类型中的“替代”属性传递到新类型

时间:2019-02-16 15:12:02

标签: javascript flowtype

假设我是基于流的类型,其类型如下:

type baseTy = { x: number, y: number, z: number}

现在,我希望(对于实用程序)具有与baseTy相同的类型,但是具有一个不同的属性:

type derivTy = {x: string, y: number, z: number}

很明显,我可以重新声明它,但这是多余的,可能在以后更新时导致问题。因此,我只想定义“差异”。如何使用流类型完成此操作?

我可以做到:

type derivTy = $Diff<baseTy, {x: any}> & {x: string}

但是,这看起来很冗长,并且没有清楚地显示其含义。有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

您可以散布类型,这就是我们在代码库中所做的,以创建相关类型:

type BaseT = { a: string, b: number }
type SubBaseT = { ...$Exact<BaseT>, b: string }
const foo: SubBaseT = { a: 'hello', b: 'world' }