我们可以通过将局部变量分配给默认泛型槽,将减少重复代码并提高性能。 这边有一段示例代码:
export type Obj = {
a: "a",
a2: "a2",
a3: "a3",
b: "b",
b2: "b2",
b3: "b3",
}
type ValueOfKeysWithA<Obj> = {
[K in Extract<keyof Obj, `a${string}`>]: Obj[K];
}[Extract<keyof Obj, `a${string}`>]
type NewUnion = ValueOfKeysWithA<Obj>
我们可以看到其中有两处都用到了Extract<keyof Obj, `a${string}`>
这样会有两个问题,首先是重复代码,其次是Extract
会执行两次,影响性能。 所以我们可以尝试把它作为局部变量的默认值来处理:
export type Obj = {
a: "a",
a2: "a2",
a3: "a3",
b: "b",
b2: "b2",
b3: "b3",
}
type ValueOfKeysWithA<Obj, ExtractKeys extends keyof Obj = Extract<keyof Obj, `a${string}`>> = {
[K in ExtractKeys]: Obj[K];
}[ExtractKeys]
type NewUnion = ValueOfKeysWithA<Obj>