Actualizacion maquina principal
[dotfiles/.git] / .config / coc / extensions / node_modules / coc-prettier / node_modules / ansi-escapes / node_modules / type-fest / source / conditional-keys.d.ts
diff --git a/.config/coc/extensions/node_modules/coc-prettier/node_modules/ansi-escapes/node_modules/type-fest/source/conditional-keys.d.ts b/.config/coc/extensions/node_modules/coc-prettier/node_modules/ansi-escapes/node_modules/type-fest/source/conditional-keys.d.ts
new file mode 100644 (file)
index 0000000..eb074dc
--- /dev/null
@@ -0,0 +1,43 @@
+/**
+Extract the keys from a type where the value type of the key extends the given `Condition`.
+
+Internally this is used for the `ConditionalPick` and `ConditionalExcept` types.
+
+@example
+```
+import {ConditionalKeys} from 'type-fest';
+
+interface Example {
+       a: string;
+       b: string | number;
+       c?: string;
+       d: {};
+}
+
+type StringKeysOnly = ConditionalKeys<Example, string>;
+//=> 'a'
+```
+
+To support partial types, make sure your `Condition` is a union of undefined (for example, `string | undefined`) as demonstrated below.
+
+@example
+```
+type StringKeysAndUndefined = ConditionalKeys<Example, string | undefined>;
+//=> 'a' | 'c'
+```
+*/
+export type ConditionalKeys<Base, Condition> = NonNullable<
+       // Wrap in `NonNullable` to strip away the `undefined` type from the produced union.
+       {
+               // Map through all the keys of the given base type.
+               [Key in keyof Base]:
+                       // Pick only keys with types extending the given `Condition` type.
+                       Base[Key] extends Condition
+                               // Retain this key since the condition passes.
+                               ? Key
+                               // Discard this key since the condition fails.
+                               : never;
+
+       // Convert the produced object into a union type of the keys which passed the conditional test.
+       }[keyof Base]
+>;