utils/path_setter
setAtPath()
function setAtPath<T, P>(
state,
path,
value): T;
Type Parameters
| Type Parameter |
T |
P extends string |
Parameters
| Parameter |
Type |
state |
T |
path |
P |
value |
P extends keyof T ? NonNullable<T[P]> : P extends `${Head}.${Rest}` ? Head extends keyof T ? Rest extends keyof NonNullable<T[Head]> ? NonNullable<NonNullable<T[Head]>[Rest]> : Rest extends `${Head}.${Rest}` ? Head extends keyof NonNullable<T[Head]> ? Rest extends keyof NonNullable<NonNullable<...>[Head]> ? NonNullable<NonNullable<...[...]>[Rest]> : Rest extends `${Head}.${Rest}` ? Head extends keyof NonNullable<...> ? Rest extends keyof ... ? NonNullable<...> : ... extends ... ? ... : ... : NonNullable<...> extends readonly ...[] ? ... extends ... ? ... : ... : never : Rest extends `${number}` ? NonNullable<...> extends readonly ...[] ? U : never : never : NonNullable<T[Head]> extends readonly U[] ? Head extends `${number}` ? Rest extends keyof U ? NonNullable<...[...]> : Rest extends `${(...)}.${(...)}` ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : never : never : Rest extends `${number}` ? NonNullable<T[Head]> extends readonly U[] ? U : never : never : T extends readonly U[] ? Head extends `${number}` ? Rest extends keyof U ? NonNullable<U[Rest]> : Rest extends `${Head}.${Rest}` ? Head extends keyof U ? Rest extends keyof NonNullable<...> ? NonNullable<...[...]> : Rest extends `${(...)}.${(...)}` ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : U extends readonly U[] ? Head extends `${(...)}` ? ... extends ... ? ... : ... : never : never : Rest extends `${number}` ? U extends readonly U[] ? U : never : never : never : never : P extends `${number}` ? T extends readonly U[] ? U : never : never |
Returns
T
updateAtPath()
function updateAtPath<T, P>(
state,
path,
updater): T;
Type Parameters
| Type Parameter |
T |
P extends string |
Parameters
| Parameter |
Type |
state |
T |
path |
P |
updater |
(current) => P extends keyof T ? NonNullable<T[P]> : P extends `${Head}.${Rest}` ? Head extends keyof T ? Rest extends keyof NonNullable<T[Head]> ? NonNullable<NonNullable<T[Head]>[Rest]> : Rest extends `${Head}.${Rest}` ? Head extends keyof NonNullable<T[Head]> ? Rest extends keyof NonNullable<...[...]> ? NonNullable<NonNullable<...>[Rest]> : Rest extends `${Head}.${Rest}` ? Head extends keyof ... ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : Rest extends `${(...)}` ? ... extends ... ? ... : ... : never : NonNullable<T[Head]> extends readonly U[] ? Head extends `${number}` ? Rest extends keyof ... ? NonNullable<...> : ... extends ... ? ... : ... : never : never : Rest extends `${number}` ? NonNullable<T[Head]> extends readonly U[] ? U : never : never : T extends readonly U[] ? Head extends `${number}` ? Rest extends keyof U ? NonNullable<U[Rest]> : Rest extends `${Head}.${Rest}` ? Head extends keyof U ? Rest extends keyof ... ? NonNullable<...> : ... extends ... ? ... : ... : U extends readonly ...[] ? ... extends ... ? ... : ... : never : Rest extends `${number}` ? U extends readonly ...[] ? U : never : never : never : never : P extends `${number}` ? T extends readonly U[] ? U : never : never |
Returns
T
Path
type Path<T, Depth> =
| Depth["length"] extends 5 ? never : T extends readonly infer U[] ? `${number}` | `${number}.${Path<U, [...Depth, unknown]>}` : T extends object ? { [K in Extract<keyof T, string>]: NonNullable<T[K]> extends readonly (...)[] ? K | `${K}.${number}` | `${K}.${number}.${Path<(...), (...)>}` : NonNullable<(...)[(...)]> extends Record<string, any> ? K | `${(...)}.${(...)}` : K }[Extract<keyof T, string>] : never
| `plugins.${string}`;
Type Parameters
| Type Parameter |
Default type |
T |
- |
Depth extends readonly unknown[] |
[] |
PathValue
type PathValue<T, P, Depth> = Depth["length"] extends 10 ? any : P extends keyof T ? NonNullable<T[P]> : P extends `${infer Head}.${infer Rest}` ? Head extends keyof T ? PathValue<NonNullable<T[Head]>, Rest, [...Depth, unknown]> : T extends readonly infer U[] ? Head extends `${number}` ? PathValue<U, Rest, [...Depth, unknown]> : never : never : P extends `${number}` ? T extends readonly infer U[] ? U : never : never;
Type Parameters
| Type Parameter |
Default type |
T |
- |
P extends string |
- |
Depth extends readonly unknown[] |
[] |