鉴于我具有以下结构
type AB = {
A: string;
B: string;
}
但是现在我想创建一个新的类型,该类型不仅可以扩展键,而且可以覆盖'A'属性。因此最终类型应为
{
A: number;
B: string;
}
所以我尝试将AB类型分配给我的最终类型,并在'A'属性后添加新类型
type final = AB & {A: number};
但是它不起作用:( 所以我的问题是;如何将类型扩展到具有更改的属性类型的其他类型?
答案 0 :(得分:1)
我不确定这是否是最优雅的解决方案,但是您可以使用映射类型过滤掉要覆盖的键,然后将其与覆盖相交:
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 }>;
答案 1 :(得分:0)
创建简单的交集(AB & {A: number}
)将不起作用,因为它将使所有单个属性分别相交。这意味着A
的类型必须为string & number
,这是不可能实现的。
改为使用此:
type Overwrite<T, U> = Pick<T, Exclude<keyof T, keyof U>> & U;
用法:
type Final = Overwrite<AB, { A: number }>
答案 2 :(得分:0)
type Override<T1, T2> = Omit<T1, keyof T2> & T2;