PickIfContains 类型以在对象中选择键是否属于对象定义
PickIfContains type to pick in an object whether the keys belongs to the object definition or not
我正在尝试构建一个类型,如果对象包含该键,该类型将选择该对象的任何键(与该键是否在对象类型上定义的事实无关。(Pick
需要属于对象类型的键)
type PickIfContains <T, K extends string []> = {
[P in K [number]]: P extends keyof T ? T [P] : never
}
type A = {a: number, b: number}
type B = PickIfContains <A, ['a', 'c']>
// GIVEN: {a: number, c: never}
// EXPECTED: {a: number}
如何在生成的类型中删除设置为 never
的键?
我确实找到了答案
只是有点冗长
type PickIfContains <T, K extends string []> = {
[
P in {
[P in K [number]]: P extends keyof T ? P : never
} [K [number]]
]: T [P]
}
如果有人有更好的解决方案,请不要犹豫;)
是的,我相信你可以做比
更简单的事情
type PickIfContains<T, K extends string> = {
[L in Extract<keyof T, K>]: T[L]
}
我正在尝试构建一个类型,如果对象包含该键,该类型将选择该对象的任何键(与该键是否在对象类型上定义的事实无关。(Pick
需要属于对象类型的键)
type PickIfContains <T, K extends string []> = {
[P in K [number]]: P extends keyof T ? T [P] : never
}
type A = {a: number, b: number}
type B = PickIfContains <A, ['a', 'c']>
// GIVEN: {a: number, c: never}
// EXPECTED: {a: number}
如何在生成的类型中删除设置为 never
的键?
我确实找到了答案 只是有点冗长
type PickIfContains <T, K extends string []> = {
[
P in {
[P in K [number]]: P extends keyof T ? P : never
} [K [number]]
]: T [P]
}
如果有人有更好的解决方案,请不要犹豫;)
是的,我相信你可以做比
type PickIfContains<T, K extends string> = {
[L in Extract<keyof T, K>]: T[L]
}