| import {Except} from './except'; |
| import {ConditionalKeys} from './conditional-keys'; |
| |
| /** |
| Exclude keys from a shape that matches the given `Condition`. |
| |
| This is useful when you want to create a new type with a specific set of keys from a shape. For example, you might want to exclude all the primitive properties from a class and form a new shape containing everything but the primitive properties. |
| |
| @example |
| ``` |
| import {Primitive, ConditionalExcept} from 'type-fest'; |
| |
| class Awesome { |
| name: string; |
| successes: number; |
| failures: bigint; |
| |
| run() {} |
| } |
| |
| type ExceptPrimitivesFromAwesome = ConditionalExcept<Awesome, Primitive>; |
| //=> {run: () => void} |
| ``` |
| |
| @example |
| ``` |
| import {ConditionalExcept} from 'type-fest'; |
| |
| interface Example { |
| a: string; |
| b: string | number; |
| c: () => void; |
| d: {}; |
| } |
| |
| type NonStringKeysOnly = ConditionalExcept<Example, string>; |
| //=> {b: string | number; c: () => void; d: {}} |
| ``` |
| */ |
| export type ConditionalExcept<Base, Condition> = Except< |
| Base, |
| ConditionalKeys<Base, Condition> |
| >; |