将对象类型中的“覆盖”属性流转换为新类型

问题描述 投票:1回答:1

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

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}

然而,这看起来相当冗长,并没有清楚地表明其含义。有一个更好的方法吗?

javascript flowtype
1个回答
1
投票

您可以传播类型,这是我们在代码库中执行的操作,以创建相关的类型:

type BaseT = { a: string, b: number }
type SubBaseT = { ...$Exact<BaseT>, b: string }
const foo: SubBaseT = { a: 'hello', b: 'world' }
© www.soinside.com 2019 - 2024. All rights reserved.