API reference / @evolu/common / Type / ObjectType

Interface: ObjectType<Props>

Defined in: packages/common/src/Type.ts:2837

ObjectType extends Type with an additional props property for reflection.

Extends

  • Type<"Object", Readonly<ObjectT<Props>>, Readonly<ObjectInput<Props>>, ObjectError<{ [K in keyof Props]: InferError<Props[K]> }>, Readonly<ObjectParent<Props>>, ObjectError<{ [K in keyof Props]: InferParentError<Props[K]> }>>

Type Parameters

Type Parameter
Props extends Record<string, AnyType>

Properties

PropertyModifierTypeDescriptionInherited fromDefined in
[EvoluTypeSymbol]readonlytrue-Type.[EvoluTypeSymbol]packages/common/src/Type.ts:334
~standardreadonlyProps<Readonly<DrainOuterGeneric<{ [K in string | number | symbol]: ({ [K in string | number | symbol]: InferInput<Props[K]> } & { [K in string | number | symbol]?: Props[K] extends OptionalType<U> ? InferInput<U> : never })[K] }>>, Readonly<DrainOuterGeneric<{ [K in string | number | symbol]: ({ [K in string | number | symbol]: InferType<Props[K]> } & { [K in string | number | symbol]?: Props[K] extends OptionalType<U> ? InferType<U> : never })[K] }>>>The Standard Schema properties.Type.~standardpackages/common/src/Type.ts:4265
ErrorpublicObjectError<{ [K in string | number | symbol]: InferError<Props[K]> }>The specific error introduced by this Type. ### Example type StringError = typeof String.Error;Type.Errorpackages/common/src/Type.ts:202
Errorsreadonly| ObjectError<{ [K in string | number | symbol]: InferError<Props[K]> }> | ObjectError<{ [K in string | number | symbol]: InferParentError<Props[K]> }>### Example type StringParentErrors = typeof String.Errors;Type.Errorspackages/common/src/Type.ts:398
fromreadonly(value) => Result<Readonly<DrainOuterGeneric<{ [K in string | number | symbol]: ({ [K in string | number | symbol]: InferType<Props[K]> } & { [K in string | number | symbol]?: (...)[(...)] extends OptionalType<(...)> ? InferType<(...)> : never })[K] }>>, | ObjectError<{ [K in string | number | symbol]: InferError<Props[K]> }> | ObjectError<{ [K in string | number | symbol]: InferParentError<Props[K]> }>>Creates T from an Input value. This is useful when we have a typed value. from is a typed alias of fromUnknown.Type.frompackages/common/src/Type.ts:217
fromParentreadonly(value) => Result<Readonly<DrainOuterGeneric<{ [K in string | number | symbol]: ({ [K in string | number | symbol]: InferType<Props[K]> } & { [K in string | number | symbol]?: (...)[(...)] extends OptionalType<(...)> ? InferType<(...)> : never })[K] }>>, ObjectError<{ [K in string | number | symbol]: InferError<Props[K]> }>>Creates T from Parent type. This function skips parent Types validations when we have already partially validated value.Type.fromParentpackages/common/src/Type.ts:311
fromUnknownreadonly(value) => Result<Readonly<DrainOuterGeneric<{ [K in string | number | symbol]: ({ [K in string | number | symbol]: InferType<Props[K]> } & { [K in string | number | symbol]?: (...)[(...)] extends OptionalType<(...)> ? InferType<(...)> : never })[K] }>>, | ObjectError<{ [K in string | number | symbol]: InferError<Props[K]> }> | ObjectError<{ [K in string | number | symbol]: InferParentError<Props[K]> }>>Creates T from an unknown value. This is useful when a value is unknown.Type.fromUnknownpackages/common/src/Type.ts:303
InputpublicReadonly<DrainOuterGeneric<{ [K in string | number | symbol]: ({ [K in string | number | symbol]: InferInput<Props[K]> } & { [K in string | number | symbol]?: Props[K] extends OptionalType<U> ? InferInput<U> : never })[K] }>>The type expected by from and fromUnknown. ### Example type StringInput = typeof String.Input;Type.Inputpackages/common/src/Type.ts:200
isreadonly(value) => value is Readonly<DrainOuterGeneric<{ [K in string | number | symbol]: ({ [K in string | number | symbol]: InferType<Props[K]> } & { [K in string | number | symbol]?: Props[K] extends OptionalType<U> ? InferType<U> : never })[K] }>>A type guard that checks whether an unknown value satisfies the Type. ### Example const value: unknown = "hello"; if (String.is(value)) { // TypeScript now knows valueis astring here. console.log("This is a valid string!"); } const strings: unknown[] = [1, "hello", true, "world"]; const filteredStrings = strings.filter(String.is); console.log(filteredStrings); // ["hello", "world"]Type.ispackages/common/src/Type.ts:332
namereadonly"Object"-Type.namepackages/common/src/Type.ts:208
orNullreadonly(value) => | Readonly<DrainOuterGeneric<{ [K in string | number | symbol]: ({ [K in string | number | symbol]: InferType<Props[K]> } & { [K in string | number | symbol]?: (...)[(...)] extends OptionalType<(...)> ? InferType<(...)> : never })[K] }>> | nullCreates T from an Input value, returning null if validation fails. This is a convenience method that combines from with getOrNull. When to use: - When you need to convert a validation result to a nullable value - When the error is not important and you just want the value or nothing ### Example // ✅ Good: Optional user input const age = PositiveInt.orNull(userInput); if (age != null) { console.log("Valid age:", age); } // ✅ Good: Default fallback const maxRetries = PositiveInt.orNull(config.retries) ?? 3; // ❌ Avoid: When you need to know why validation failed (use from instead) const result = PositiveInt.from(userInput); if (!result.ok) { console.error(formatPositiveError(result.error)); }Type.orNullpackages/common/src/Type.ts:296
orThrowreadonly(value) => TCreates T from an Input value, throwing an error if validation fails. Throws an Error with the Type validation error in its cause property, making it debuggable while avoiding the need for custom error messages. This is a convenience method that combines from with getOrThrow. When to use: - Configuration values that are guaranteed to be valid (e.g., hardcoded constants) - Application startup where failure should crash the program - As an alternative to assertions when the Type error in the thrown Error's cause provides sufficient debugging information - Test code with known valid inputs (when error message clarity is not critical; for better test error messages, use Vitest schemaMatching + assert with .is()) ### Example // ✅ Good: Known valid constant const maxRetries = PositiveInt.orThrow(3); // ✅ Good: App configuration that should crash on invalid values const appName = SimpleName.orThrow("MyApp"); // ✅ Good: Instead of assert when Type error is clear enough // Context makes it obvious: count increments from non-negative value const currentCount = counts.get(id) ?? 0; const newCount = PositiveInt.orThrow(currentCount + 1); // ✅ Good: Test setup with known valid values const testUser = User.orThrow({ name: "Alice", age: 30 }); // ❌ Avoid: User input (use from instead) const userAge = PositiveInt.orThrow(userInput); // Could crash! // ✅ Better: Handle user input gracefully const ageResult = PositiveInt.from(userInput); if (!ageResult.ok) { // Handle validation error }Type.orThrowpackages/common/src/Type.ts:265
ParentpublicReadonly<DrainOuterGeneric<{ [K in string | number | symbol]: ({ [K in string | number | symbol]: InferParent<Props[K]> } & { [K in string | number | symbol]?: Props[K] extends OptionalType<U> ? InferParent<U> : never })[K] }>>The parent type. ### Example type StringParent = typeof String.Parent;Type.Parentpackages/common/src/Type.ts:204
ParentErrorpublicObjectError<{ [K in string | number | symbol]: InferParentError<Props[K]> }>The parent's error. ### Example type StringParentError = typeof String.ParentError;Type.ParentErrorpackages/common/src/Type.ts:206
propsreadonlyProps--packages/common/src/Type.ts:2846
TypereadonlyTThe type this Type resolves to. ### Example type String = typeof String.Type;Type.Typepackages/common/src/Type.ts:345

Was this page helpful?