Type Alias Schema<ObjectType, ValueType>

Schema: ObjectType extends string
    ? ValueType
    : ObjectType extends Map<unknown, unknown>
        ? ValueType
        : ObjectType extends Set<unknown>
            ? ValueType
            : ObjectType extends ReadonlyMap<unknown, unknown>
                ? ValueType
                : ObjectType extends ReadonlySet<unknown>
                    ? ValueType
                    : ObjectType extends readonly unknown[]
                        ? ValueType
                        : ObjectType extends unknown[]
                            ? ValueType
                            : ObjectType extends (...arguments: unknown[]) => unknown
                                ? ValueType
                                : ObjectType extends Date
                                    ? ValueType
                                    : ObjectType extends Function
                                        ? ValueType
                                        : (...) extends (...) ? (...) : (...)

Create a deep version of another object type where property values are recursively replaced into a given value type.

Use-cases:

  • Form validation: Define how each field should be validated.
  • Form settings: Define configuration for input fields.
  • Parsing: Define types that specify special behavior for specific fields.

Type Parameters

  • ObjectType
  • ValueType
import type {Schema} from 'type-fest';

interface User {
id: string;
name: {
firstname: string;
lastname: string;
};
created: Date;
active: boolean;
passwordHash: string;
}

type UserMask = Schema<User, 'mask' | 'hide' | 'show'>;

const userMaskSettings: UserMask = {
id: 'show',
name: {
firstname: 'show',
lastname: 'mask',
},
created: 'show',
active: 'show',
passwordHash: 'hide',
}