Skip to content

Commit 0d67f1d

Browse files
committed
feat: allow objects to be specified without "type": "object"
1 parent 45c76cc commit 0d67f1d

File tree

2 files changed

+25
-17
lines changed

2 files changed

+25
-17
lines changed

index.d.ts

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -97,23 +97,6 @@ declare namespace AsTypedInternal {
9797
: AsTypedTupleSchemaWithAdditional<TupleType, Additional>
9898
: SchemaType extends { not: infer T }
9999
? ResolveNot<T>
100-
: SchemaType extends {
101-
type: "object";
102-
required?: infer Required;
103-
properties?: infer Props;
104-
additionalProperties?: infer AdditionalProperties;
105-
}
106-
? ResolveObject<
107-
Props,
108-
Required extends undefined
109-
? unknown
110-
: Required extends string[]
111-
? string extends Required[number]
112-
? unknown
113-
: Required[number]
114-
: unknown,
115-
AdditionalProperties
116-
>
117100
: SchemaType extends { type: "array"; items: infer ValueType }
118101
? Array<Resolve<ValueType>>
119102
: SchemaType extends {
@@ -134,6 +117,23 @@ declare namespace AsTypedInternal {
134117
? ResolveAllOf<Inner>
135118
: SchemaType extends { if: infer If; then: infer Then; else?: infer Else }
136119
? (Resolve<If> & Resolve<Then>) | Resolve<Else>
120+
: SchemaType extends {
121+
type?: "object";
122+
required?: infer Required;
123+
properties?: infer Props;
124+
additionalProperties?: infer AdditionalProperties;
125+
}
126+
? ResolveObject<
127+
Props,
128+
Required extends undefined
129+
? unknown
130+
: Required extends string[]
131+
? string extends Required[number]
132+
? unknown
133+
: Required[number]
134+
: unknown,
135+
AdditionalProperties
136+
>
137137
: never;
138138

139139
type ResolveAllOf<Tuple> = Tuple extends []

test.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,14 @@ assert(
9595
_ as { a: number; b: string }
9696
);
9797

98+
assert(
99+
_ as AsTyped<{
100+
required: ["a", "b"];
101+
properties: { a: { type: "number" }; b: { type: "string" } };
102+
}>,
103+
_ as { a: number; b: string }
104+
);
105+
98106
assert(
99107
_ as AsTyped<{ type: "object"; additionalProperties: { type: "number" } }>,
100108
_ as { [key: string]: number }

0 commit comments

Comments
 (0)