Comparing version
@@ -229,2 +229,6 @@ declare namespace AsTypedInternal { | ||
? number | ||
: SchemaType extends TupleSchema<infer TupleType, infer Additional> | ||
? Additional extends null | ||
? AsTypedTupleSchema<TupleType> | ||
: AsTypedTupleSchemaWithAdditional<TupleType, Additional> | ||
: SchemaType extends Not<infer T> | ||
@@ -256,6 +260,2 @@ ? ResolveNot<T> | ||
// TODO | ||
type ResolveOneOf<InnerSchema> = InnerSchema; | ||
// High order resolution changes the schema before resolving it to typed | ||
@@ -268,3 +268,3 @@ | ||
: SchemaToResolve extends OneOf<infer Inner> | ||
? ResolveOneOf<Inner> | ||
? Inner | ||
: SchemaToResolve extends AllOf<infer Inner> | ||
@@ -276,10 +276,5 @@ ? UnionToIntersection<Inner> | ||
type ResolveRecursive<SchemaType> = SchemaType extends TupleSchema< | ||
infer TupleType, | ||
infer Additional | ||
> | ||
? Additional extends null | ||
? AsTypedTupleSchema<TupleType> | ||
: AsTypedTupleSchemaWithAdditional<TupleType, Additional> | ||
: ResolveRecursiveInternal<ResolveHighOrder<SchemaType>>; | ||
type ResolveRecursive<SchemaType> = ResolveRecursiveInternal< | ||
ResolveHighOrder<SchemaType> | ||
>; | ||
@@ -286,0 +281,0 @@ type MapPropsToRefs< |
{ | ||
"name": "as-typed", | ||
"version": "0.0.0-dev.20201226200227", | ||
"version": "0.0.0-dev.20201228213229", | ||
"description": "Static TypeScript types from a literal JSONSchema type", | ||
@@ -5,0 +5,0 @@ "types": "index.d.ts", |
24
test.ts
@@ -131,3 +131,27 @@ import { AsTyped } from "./index"; | ||
_ as AsTyped<{ | ||
oneOf: [{ type: "string" }, { type: "array"; items: { type: "string" } }]; | ||
}>, | ||
_ as string | string[] | ||
); | ||
assert( | ||
_ as AsTyped<{ | ||
oneOf: [{ type: "string" }, { type: "array"; items: [] }]; | ||
}>, | ||
_ as string | [] | ||
); | ||
assert( | ||
_ as AsTyped<{ | ||
oneOf: [ | ||
{ type: "array"; items: [{ type: "string" }] }, | ||
{ type: "array"; items: [] } | ||
]; | ||
}>, | ||
_ as [string] | [] | ||
); | ||
assert( | ||
_ as AsTyped<{ | ||
oneOf: [ | ||
{ type: "string" }, | ||
@@ -134,0 +158,0 @@ { type: "object"; properties: { a: { type: "number" } } } |
36010
0.96%939
1.95%