我想编写一个递归省略字段的类型实用程序。你会这样命名和使用的东西OmitRecursively<SomeType, 'keyToOmit'>
我尝试使用映射类型 + 条件类型来完成它,但是当所有必需的字段都正确输入时我坚持了这种情况(因此字段从嵌套类型中消失了),但是该方法忽略了可选字段。
// This is for one function that removes recursively __typename field
// that Appolo client adds
type Deapolify<T extends { __typename: string }> = Omit<
{ [P in keyof T]: T[P] extends { __typename: string } ? Deapolify<T[P]> : T[P] },
'__typename'
>
// Or more generic attempt
type OmitRecursively<T extends any, K extends keyof T> = Omit<
{ [P in keyof T]: T[P] extends any ? Omit<T[P], K> : never },
K
> …Run Code Online (Sandbox Code Playgroud)