diff --git a/src/lib/table.spec.ts b/src/lib/table.spec.ts index 07c2de3..114a197 100644 --- a/src/lib/table.spec.ts +++ b/src/lib/table.spec.ts @@ -349,6 +349,8 @@ describe('Table', () => { readonly id: string; readonly name: string; }; + // eslint-disable-next-line functional/prefer-readonly-type + readonly someArray?: string[]; }; }; @@ -416,12 +418,18 @@ describe('Table', () => { id: '123', name: 'fred', }, + someArray: ['Fred'], }, }; const setup = async () => { await compoundTable.put(key); return compoundTable.get(key, { - keys: ['gsihash', 'sort', 'complexSubDoc.subSubDoc.id'], + keys: [ + 'gsihash', + 'sort', + 'complexSubDoc.subSubDoc.id', + 'complexSubDoc.someArray', + ], }); }; it('Should get selected keys', async () => { @@ -429,6 +437,7 @@ describe('Table', () => { expect(result?.gsihash).toEqual(key.gsihash); expect(result?.sort).toEqual(key.sort); expect(result?.complexSubDoc.subSubDoc.id).toEqual('123'); + expect(result?.complexSubDoc.someArray).toEqual(['Fred']); expect((result?.complexSubDoc.subSubDoc as any).name).toBeUndefined(); expect((result?.complexSubDoc as any).id).toBeUndefined(); }); diff --git a/src/lib/types.ts b/src/lib/types.ts index 9ae7ba5..fc0977b 100644 --- a/src/lib/types.ts +++ b/src/lib/types.ts @@ -52,11 +52,15 @@ type Prev = [never, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]; export type NestedKeyOf = [D] extends [never] ? never : T extends object - ? - | (keyof T & string) - | { [K in keyof T]-?: Join> }[keyof T] + ? { [K in keyof T]-?: Join> }[keyof T] : ''; +type Join = K extends string + ? P extends string + ? `${K}${'' extends P ? '' : '.'}${P}` + : never + : never; + export type UnionToIntersection = ( // eslint-disable-next-line @typescript-eslint/no-explicit-any U extends any @@ -70,12 +74,6 @@ export type UnionToIntersection = ( ? I : Default; -type Join = K extends string | number - ? P extends string | number - ? `${K}${'' extends P ? '' : '.'}${P}` - : never - : never; - type _NestedPick< A, K extends string,