import type { Schema, IAnySchema, symbol } from "./schema"; export type Merge = { [K in keyof T]: T[K]; }; export type OptionalUndefined = Merge<{ [K in OptionsProps]?: T[K]; } & { [K in Exclude]: T[K]; }>; export type Simplify = { [KeyType in keyof T]: T[KeyType]; } & {}; export type OptionallyOptional = T extends undefined ? C | undefined : C; export type Writeable = { -readonly [P in keyof T]: T[P]; }; export type DeepWriteable = { -readonly [P in keyof T]: DeepWriteable; }; export type Static = S[typeof symbol]["static"] extends { [key: string]: any; } ? Simplify : S[typeof symbol]["static"]; export type StaticCoerced = S[typeof symbol]["coerced"] extends { [key: string]: any; } ? Simplify : S[typeof symbol]["coerced"]; export type StaticConstEnum = Schema extends { const: infer C; } ? C : Schema extends { enum: infer E; } ? E extends readonly any[] ? [...E][number] : E extends any[] ? E[number] : Fallback : Fallback; export type RemoveUnknownAdditionalProperties = { [K in keyof T]: K extends string ? T[K] : never; } extends Record ? { [K in keyof T as K extends string ? unknown extends T[K] ? never : K : K]: T[K]; } : T;