Joj*_*oji 7 javascript typescript
我有两个接口A,B它们有一个共同的属性
interface A {
a: boolean;
b: number;
c: string;
d: boolean;
}
interface B {
d: string;
}
interface C extends A,B {}
Run Code Online (Sandbox Code Playgroud)
理想情况下,我想C成为
{
a: boolean;
b: number;
c: string;
d: boolean | string; <- merged
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?我知道我可以Pick用来省略相同的密钥,然后扩展它,但还有其他方法吗?
干得好:
type Merge<X, Y> = {
[K in (keyof X | keyof Y)]:
(K extends keyof X ? X[K] : never)
| (K extends keyof Y ? Y[K] : never)
};
Run Code Online (Sandbox Code Playgroud)
用法示例:
interface A {
a: boolean;
b: number;
c: string;
d: boolean;
}
interface B {
d: string;
}
type C = Merge<A, B>;
// Result:
type C = {
a: boolean;
b: number;
c: string;
d: string | boolean;
}
Run Code Online (Sandbox Code Playgroud)