Sha256: a5ca6512e1e0f4aafbbdbc829a3bb5654529aaf299ab760c351e6e6b406548fb

Contents?: true

Size: 1.81 KB

Versions: 28

Compression:

Stored size: 1.81 KB

Contents

/**
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.

@example
```
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',
}
```

@category Object
*/
export type Schema<ObjectType, ValueType> = 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 Array<infer U>
						? Array<Schema<U, ValueType>>
						: ObjectType extends (...arguments_: unknown[]) => unknown
							? ValueType
							: ObjectType extends Date
								? ValueType
								: ObjectType extends Function
									? ValueType
									: ObjectType extends RegExp
										? ValueType
										: ObjectType extends object
											? SchemaObject<ObjectType, ValueType>
											: ValueType;

/**
Same as `Schema`, but accepts only `object`s as inputs. Internal helper for `Schema`.
*/
type SchemaObject<ObjectType extends object, K> = {
	[KeyType in keyof ObjectType]: ObjectType[KeyType] extends readonly unknown[] | unknown[]
		? Schema<ObjectType[KeyType], K>
		: Schema<ObjectType[KeyType], K> | K;
};

Version data entries

28 entries across 28 versions & 2 rubygems

Version Path
clapton-0.0.26 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.25 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.24 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.23 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.22 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.21 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.20 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.19 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.18 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.17 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.16 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.15 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.14 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.13 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.12 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.11 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.10 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.9 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.8 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts
clapton-0.0.7 lib/clapton/javascripts/node_modules/type-fest/source/schema.d.ts