Skip to content

Commit 0f6fbf9

Browse files
author
dominikjasek
committed
1 parent b2abbd6 commit 0f6fbf9

File tree

2 files changed

+11
-6
lines changed

2 files changed

+11
-6
lines changed

src/assertRequiredKeys.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
import { RecursiveNullableKeyOf } from "./types/recursive-key-of.type";
22
import { RequiredKeys, WithRequiredKeys } from "./types/with-required-keys";
3+
import { F } from "ts-toolbelt";
34

4-
export function assertRequiredKeys<T, TKeys extends RecursiveNullableKeyOf<T>[]>(
5+
export function assertRequiredKeys<T, const TKeys extends readonly RecursiveNullableKeyOf<T>[]>(
56
obj: T,
67
requiredKeys: TKeys
78
): asserts obj is RequiredKeys<T, TKeys> {
@@ -16,7 +17,7 @@ export function assertRequiredKeys<T, TKeys extends RecursiveNullableKeyOf<T>[]>
1617
// currentObj = currentObj[path];
1718
// }
1819
// }
19-
// return null as any;
20+
return null as any;
2021
}
2122

2223
interface Person {
@@ -48,9 +49,10 @@ person.age;
4849
person.address.city;
4950
// ^?
5051

51-
assertRequiredKeys(person, [""]);
52+
assertRequiredKeys(person, ["address.city"]);
53+
// ^?
5254

5355
person.age;
5456
// ^?
5557
person.address.city;
56-
// ^?
58+
// ^?

src/types/with-required-keys.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,10 @@ export type WithRequiredKeys<Obj, RequiredKeys extends string[], Prefix extends
2121
: never;
2222
};
2323

24-
export type RequiredKeys<T, RequiredKeys extends RecursiveNullableKeyOf<T>[]> = WithRequiredKeys<T, RequiredKeys>;
24+
export type RequiredKeys<T, RequiredKeys extends readonly RecursiveNullableKeyOf<T>[]> = WithRequiredKeys<
25+
T,
26+
RequiredKeys
27+
>;
2528

2629
// ------------------------
2730
interface Person {
@@ -39,7 +42,7 @@ const person: T1 = {
3942
age: 3,
4043
name: "S",
4144
address: {
42-
city: null,
45+
city: "null",
4346
country: "S",
4447
},
4548
};

0 commit comments

Comments
 (0)