/** An object schema. */
export function object<T, R extends object>(schema: Schema<T, R>, options?: ObjectOptions<R>): TransformObject<T, R> {
const entries = (Object.entries(schema) as [string, Transform<T, R[keyof R]>][]).sort(([, a], [, b]) => a.kind - b.kind);
return {
kind: TransformKind.Object,
children: entries as SchemaEntries,
sealed: options?.sealed,
extract: (from: T) => {
if (isUndefinedOrNull(from)) {
return from as unknown as R;