diff --git a/src/__tests__/array.test.ts b/src/__tests__/array.test.ts index af2e520..7396e4e 100644 --- a/src/__tests__/array.test.ts +++ b/src/__tests__/array.test.ts @@ -142,4 +142,22 @@ describe("array", () => { const records = array(record, 2); expect(records()).toHaveLength(2); }); + + test("readonly arrays", () => { + type Bar = { + index: number; + }; + + type Foo = { + readonly bars: ReadonlyArray; + }; + + const barFactory = define({ index: sequence }); + + const fooFactory = define({ + bars: array(barFactory, 2) + }); + + expect(fooFactory().bars).toHaveLength(2); + }); }); diff --git a/src/utils.ts b/src/utils.ts index e2cd894..53364a7 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -46,7 +46,10 @@ type Diff = T extends U ? never : T; // into `{ b: number; }` type DiffProperties = Pick, Keys>>; -export type ArrayElement = ArrayType extends (infer ElementType)[] +// Given an array, infer the type of it's elements +export type ArrayElement = ArrayType extends ReadonlyArray< + infer ElementType +> ? ElementType : never;