Skip to content

Commit 448d099

Browse files
committed
fix: 🐛 make optinal keys resolve to T | undefined
1 parent d5eaa11 commit 448d099

File tree

3 files changed

+27
-17
lines changed

3 files changed

+27
-17
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import {SchemaOf, t} from '../../type';
2+
import {Message, NotificationMessage} from '../json-rx';
3+
4+
test('...', () => {
5+
console.log(NotificationMessage + '');
6+
type adasfsad = SchemaOf<typeof NotificationMessage.type>;
7+
type asdf = t.infer<typeof NotificationMessage.type>;
8+
// console.log(Message + '');
9+
});

src/schema/schema.ts

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -489,19 +489,21 @@ export type TypeOfValue<T> = T extends BoolSchema
489489
]
490490
: T extends ConSchema<infer U>
491491
? U
492-
: T extends KeySchema<infer K, infer V>
493-
? TypeOf<V>
494-
: T extends ObjSchema<infer F>
495-
? NoEmptyInterface<TypeFields<Mutable<F>>>
496-
: T extends MapSchema<infer U>
497-
? Record<string, TypeOf<U>>
498-
: T extends BinSchema
499-
? Uint8Array
500-
: T extends FnSchema<infer Req, infer Res, infer Ctx>
501-
? (req: TypeOf<Req>, ctx: Ctx) => UndefToVoid<TypeOf<Res>> | Promise<UndefToVoid<TypeOf<Res>>>
502-
: T extends FnRxSchema<infer Req, infer Res, infer Ctx>
503-
? (req$: Observable<TypeOf<Req>>, ctx: Ctx) => Observable<UndefToVoid<TypeOf<Res>>>
504-
: never;
492+
: T extends OptKeySchema<infer K, infer V>
493+
? (TypeOf<V> | undefined)
494+
: T extends KeySchema<infer K, infer V>
495+
? TypeOf<V>
496+
: T extends ObjSchema<infer F>
497+
? NoEmptyInterface<TypeFields<Mutable<F>>>
498+
: T extends MapSchema<infer U>
499+
? Record<string, TypeOf<U>>
500+
: T extends BinSchema
501+
? Uint8Array
502+
: T extends FnSchema<infer Req, infer Res, infer Ctx>
503+
? (req: TypeOf<Req>, ctx: Ctx) => UndefToVoid<TypeOf<Res>> | Promise<UndefToVoid<TypeOf<Res>>>
504+
: T extends FnRxSchema<infer Req, infer Res, infer Ctx>
505+
? (req$: Observable<TypeOf<Req>>, ctx: Ctx) => Observable<UndefToVoid<TypeOf<Res>>>
506+
: never;
505507

506508
export type TypeOfMap<M extends Record<string, Schema>> = {
507509
[K in keyof M]: TypeOf<M[K]>;

src/type/classes/ObjType.ts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,15 +35,14 @@ export class KeyType<K extends string, V extends Type> extends AbsType<schema.Ke
3535
}
3636
}
3737

38-
export class KeyOptType<K extends string, V extends Type> extends KeyType<K, V> {
38+
export class KeyOptType<K extends string, V extends Type> extends AbsType<schema.OptKeySchema<K, SchemaOf<V>>> {
3939
public readonly optional: boolean = true;
4040

4141
constructor(
4242
public readonly key: K,
4343
public readonly val: V,
4444
) {
45-
super(key, val);
46-
(this as any).schema = schema.s.KeyOpt(key, schema.s.any) as any;
45+
super(schema.s.KeyOpt(key, schema.s.any) as any);
4746
}
4847

4948
protected toStringTitle(): string {
@@ -113,7 +112,7 @@ export class ObjType<
113112

114113
public getField<K extends keyof schema.TypeOf<schema.ObjSchema<SchemaOfObjectFields<F>>>>(
115114
key: K,
116-
): KeyType<string, Type> | undefined {
115+
): KeyType<string, Type> | KeyOptType<string, Type> | undefined {
117116
return this.keys.find((f) => f.key === key);
118117
}
119118

0 commit comments

Comments
 (0)