0.1.4 #5
@@ -1,37 +0,0 @@
|
|||||||
import { Array, Function, Option, Predicate, Schema } from "effect"
|
|
||||||
import type { Simplify } from "effect/Types"
|
|
||||||
|
|
||||||
|
|
||||||
export type SchemaFromPath<S, P extends readonly any[]> = S extends Schema.Schema.Any
|
|
||||||
? P extends [infer Head, ...infer Tail]
|
|
||||||
? Head extends keyof S["Type"]
|
|
||||||
? (
|
|
||||||
S extends Schema.TupleType<infer Elements, infer Rest> ? (
|
|
||||||
Head extends keyof Elements ? SchemaFromPath<Elements[Head], Tail> :
|
|
||||||
Head extends keyof Rest ? SchemaFromPath<Rest, Tail> :
|
|
||||||
never
|
|
||||||
) :
|
|
||||||
S extends Schema.Array$<infer Value> ? SchemaFromPath<Value, Tail> :
|
|
||||||
S extends Schema.Struct<infer Fields> ? SchemaFromPath<Fields[Head], Tail> :
|
|
||||||
never
|
|
||||||
)
|
|
||||||
: never
|
|
||||||
: S
|
|
||||||
: never
|
|
||||||
|
|
||||||
const TestSchema = Schema.Struct({
|
|
||||||
allUsers: Schema.Array(Schema.Struct({
|
|
||||||
name: Schema.String
|
|
||||||
})),
|
|
||||||
|
|
||||||
admins: Schema.Tuple(
|
|
||||||
Schema.Struct({
|
|
||||||
name: Schema.Literal("Gneugneu")
|
|
||||||
}),
|
|
||||||
Schema.Struct({
|
|
||||||
name: Schema.Literal("AAAAYA")
|
|
||||||
}),
|
|
||||||
),
|
|
||||||
})
|
|
||||||
type S = SchemaFromPath<typeof TestSchema, ["admins", 0, "name"]>
|
|
||||||
type T = number extends keyof typeof TestSchema.fields.admins.elements ? true : false
|
|
||||||
Reference in New Issue
Block a user