Skip to content

Commit 46e1c50

Browse files
committed
feat: add support for value object array
1 parent 4cc7a98 commit 46e1c50

File tree

4 files changed

+31
-1
lines changed

4 files changed

+31
-1
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@codelytv/primitives-type",
3-
"version": "1.0.4",
3+
"version": "1.0.5",
44
"description": "Type entity primitives from value objects",
55
"keywords": [
66
"typescript",

src/Primitives.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { Address } from "../tests/Address";
2+
13
/* eslint-disable @typescript-eslint/ban-types */
24
type Methods<T> = {
35
[P in keyof T]: T[P] extends Function ? P : never;
@@ -12,6 +14,8 @@ type ValueObjectValue<T> = {
1214
? Pick<T[key], "value">["value"]
1315
: T[key] extends Array<{ value: unknown }>
1416
? Pick<T[key][number], "value">["value"][]
17+
: T[key] extends Array<Object>
18+
? Primitives<T[key][number]>[]
1519
: T[key] extends Object
1620
? Primitives<T[key]>
1721
: T[key];

tests/DeliveryInfo.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Primitives } from "../src/Primitives";
2+
import { Address } from "./Address";
3+
4+
export class DeliveryInfo {
5+
constructor(readonly addresses: Address[]) {}
6+
7+
toPrimitives(): Primitives<DeliveryInfo> {
8+
return {
9+
addresses: this.addresses.map((address) => address.toPrimitives()),
10+
};
11+
}
12+
}

tests/Primitives.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { expectTypeOf } from "expect-type";
22

33
import { Primitives } from "../src/Primitives";
44
import { Course } from "./Course";
5+
import { DeliveryInfo } from "./DeliveryInfo";
56
import { Learner } from "./Learner";
67
import { User } from "./User";
78

@@ -38,4 +39,17 @@ describe("Primitives", () => {
3839

3940
expectTypeOf<actualPrimitives>().toEqualTypeOf<expectedPrimitives>();
4041
});
42+
43+
it("should generate nested primitive type from array of value objects prop", () => {
44+
type actualPrimitives = Primitives<DeliveryInfo>;
45+
46+
type expectedPrimitives = {
47+
readonly addresses: {
48+
readonly city: string;
49+
readonly street: string;
50+
}[];
51+
};
52+
53+
expectTypeOf<actualPrimitives>().toEqualTypeOf<expectedPrimitives>();
54+
});
4155
});

0 commit comments

Comments
 (0)