如何覆盖属性类型?

达基托

鉴于我有以下结构

type AB = {
    A: string;
    B: string;
}

但现在我想创建一个新类型,它扩展键但也覆盖 'A' 属性。所以最终类型应该是

{
    A: number;
    B: string;
}

所以我尝试将 AB 类型分配给我的最终类型,并使用新类型附加 'A' 属性

type final = AB & {A: number};

但它不起作用:(所以我的问题是;如何将类型扩展到其他具有更改属性类型的类型?

德米特里

我不确定这是否是最优雅的解决方案,但您可以使用映射类型过滤掉要覆盖的键,然后将其与覆盖相交:

type Override<T1, T2> = {
    [K in Exclude<keyof T1, keyof T2>]: T1[K]
} & {
    [K in keyof T2]: T2[K]
};

type final = Override<AB, { A: number }>;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章