UNPKG

657 BTypeScriptView Raw
1import type {IsEqual} from './is-equal';
2
3/**
4Extract all writable keys from the given type.
5
6This is useful when you want to create a new type that contains writable keys only.
7
8@example
9```
10import type {WritableKeysOf} from 'type-fest';
11
12interface User {
13 name: string;
14 surname: string;
15 readonly id: number;
16}
17
18type UpdateRequest<Entity extends object> = Pick<Entity, WritableKeysOf<Entity>>;
19
20const update1: UpdateRequest<User> = {
21 name: 'Alice',
22 surname: 'Acme',
23};
24```
25
26@category Utilities
27*/
28export type WritableKeysOf<T> = NonNullable<{
29 [P in keyof T]: IsEqual<{[Q in P]: T[P]}, {readonly [Q in P]: T[P]}> extends false ? P : never
30}[keyof T]>;