题目描述
将两个类型合并成一个类型,第二个类型的键会覆盖第一个类型的键。
例如
type foo = {
name: string;
age: string;
}
type coo = {
age: number;
sex: string
}
type Result = Merge<foo,coo>; // expected to be {name: string, age: number, sex: string}
题解
/*
* @Author: CN\ex_huangsx20 ex_huangsx20@partner.midea.com
* @Date: 2025-01-06 17:19:01
* @LastEditors: CN\ex_huangsx20 ex_huangsx20@partner.midea.com
* @LastEditTime: 2025-01-06 17:22:53
* @FilePath: c:\Users\ex_huangsx20\.typeChallenges\00599-medium-merge.ts
* @Description: Modify here please
*/
// ============= Test Cases =============
import type { Equal, Expect } from './test-utils'
type Foo = {
a: number
b: string
}
type Bar = {
b: number
c: boolean
}
type cases = [
Expect<Equal<Merge<Foo, Bar>, {
a: number
b: number
c: boolean
}>>,
]
// ============= Your Code Here =============
type Merge<L, R> = {
[P in keyof L | keyof R]:
P extends keyof R
? R[P]
: P extends keyof L
? L[P]
: never
}
遍历联合类型
[P in keyof L | keyof R]:遍历L和R的所有键的联合类型
条件类型
-
P extends keyof R ? R[P] : P extends keyof L ? L[P] : never-
如果
P是R的键,则使用R[P]的值 -
如果
P是L的键,则使用L[P]的值 -
否则返回
never
-