Skip to content

Commit 617e4df

Browse files
feat: add unknown properties support (#11)
* test: add Metadata class and test for inferring primitive properties from metadata * fix: update ValueObjectValue type to handle unknown key properties * test: refine title test case to infer properties with unknown type * chore: update package version Co-authored-by: Javier Ferrer González <[email protected]>
1 parent f11bad7 commit 617e4df

File tree

5 files changed

+28
-4
lines changed

5 files changed

+28
-4
lines changed

package-lock.json

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@codelytv/primitives-type",
3-
"version": "1.0.6",
3+
"version": "1.1.0",
44
"description": "Type entity primitives from value objects",
55
"keywords": [
66
"typescript",

src/Primitives.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,10 @@ type ValueObjectValue<T> = T extends PrimitiveTypes
1717
? U[]
1818
: T extends Array<infer U>
1919
? Array<ValueObjectValue<U>>
20-
: T extends { [K in keyof Properties<T>]: infer U }
20+
: T extends { [K in keyof Properties<T>]: unknown }
2121
? { [K in keyof Properties<T>]: ValueObjectValue<Properties<T>[K]> }
22+
: T extends unknown
23+
? T
2224
: never;
2325

2426
export type Primitives<T> = {

tests/Metadata.ts

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { Primitives } from "../src";
2+
3+
export class Metadata {
4+
constructor(public readonly data: Record<string, unknown>) {}
5+
6+
toPrimitives(): Primitives<Metadata> {
7+
return {
8+
data: this.data,
9+
};
10+
}
11+
}

tests/Primitives.test.ts

+11
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { Primitives } from "../src";
44
import { Course } from "./Course";
55
import { DeliveryInfo } from "./DeliveryInfo";
66
import { Learner } from "./Learner";
7+
import { Metadata } from "./Metadata";
78
import { Product } from "./Product";
89
import { User } from "./User";
910
import { Video } from "./Video";
@@ -79,4 +80,14 @@ describe("Primitives", () => {
7980

8081
expectTypeOf<actualPrimitives>().toEqualTypeOf<expectedPrimitives>();
8182
});
83+
84+
it("should infer properties with unknown type", () => {
85+
type actualPrimitives = Primitives<Metadata>;
86+
87+
type expectedPrimitives = {
88+
readonly data: Record<string, unknown>;
89+
};
90+
91+
expectTypeOf<actualPrimitives>().toEqualTypeOf<expectedPrimitives>();
92+
});
8293
});

0 commit comments

Comments
 (0)