<Tag extends string>(tag: Tag): new <
A extends Record<string, any>,
Success,
Error = never,
Services = never
>(
args: Types.Equals<
Omit<A, keyof Request<unknown, unknown>>,
{}
> extends true
? void
: {
readonly [P in keyof A as P extends
| "_tag"
| keyof Request<any, any, any>
? never
: P]: A[P]
}
) => Request<Success, Error, Services> &
Readonly<A> & { readonly _tag: Tag }Creates a class constructor for requests with a fixed _tag field.
Details
Use this when defining class-based request types that should participate in tagged unions or tag-based request resolvers.
Example (Defining tagged request classes)
import { Request } from "effect"
class GetUserById
extends Request.TaggedClass("GetUserById")<{ id: number }, string, Error>
{}
const request = new GetUserById({ id: 123 })
console.log(request._tag) // "GetUserById"
console.log(request.id) // 123export const const TaggedClass: <Tag extends string>(
tag: Tag
) => new <
A extends Record<string, any>,
Success,
Error = never,
Services = never
>(
args: Types.Equals<
Omit<A, keyof Request<unknown, unknown>>,
{}
> extends true
? void
: {
readonly [P in keyof A as P extends
| "_tag"
| keyof Request<any, any, any>
? never
: P]: A[P]
}
) => Request<Success, Error, Services> &
Readonly<A> & { readonly _tag: Tag }
Creates a class constructor for requests with a fixed _tag field.
Details
Use this when defining class-based request types that should participate in
tagged unions or tag-based request resolvers.
Example (Defining tagged request classes)
import { Request } from "effect"
class GetUserById
extends Request.TaggedClass("GetUserById")<{ id: number }, string, Error>
{}
const request = new GetUserById({ id: 123 })
console.log(request._tag) // "GetUserById"
console.log(request.id) // 123
TaggedClass = <function (type parameter) Tag in <Tag extends string>(tag: Tag): new <A extends Record<string, any>, Success, Error = never, Services = never>(args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof Request<any, any, any> ? never : P]: A[P]; }) => Request<Success, Error, Services> & Readonly<A> & {
readonly _tag: Tag;
}
Tag extends string>(
tag: Tag extends stringtag: function (type parameter) Tag in <Tag extends string>(tag: Tag): new <A extends Record<string, any>, Success, Error = never, Services = never>(args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof Request<any, any, any> ? never : P]: A[P]; }) => Request<Success, Error, Services> & Readonly<A> & {
readonly _tag: Tag;
}
Tag
): new<function (type parameter) A in <A extends Record<string, any>, Success, Error = never, Services = never>(args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof Request<any, any, any> ? never : P]: A[P]; }): Request<Success, Error, Services> & Readonly<A> & {
readonly _tag: Tag;
}
A extends type Record<K extends keyof any, T> = {
[P in K]: T
}
Construct a type with a set of properties K of type T
Record<string, any>, function (type parameter) Success in <A extends Record<string, any>, Success, Error = never, Services = never>(args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof Request<any, any, any> ? never : P]: A[P]; }): Request<Success, Error, Services> & Readonly<A> & {
readonly _tag: Tag;
}
Success, function (type parameter) Error in <A extends Record<string, any>, Success, Error = never, Services = never>(args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof Request<any, any, any> ? never : P]: A[P]; }): Request<Success, Error, Services> & Readonly<A> & {
readonly _tag: Tag;
}
Error = never, function (type parameter) Services in <A extends Record<string, any>, Success, Error = never, Services = never>(args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof Request<any, any, any> ? never : P]: A[P]; }): Request<Success, Error, Services> & Readonly<A> & {
readonly _tag: Tag;
}
Services = never>(
args: Types.Equals<
Omit<A, keyof Request<unknown, unknown>>,
{}
> extends true
? void
: {
readonly [P in keyof A as P extends
| "_tag"
| keyof Request<any, any, any>
? never
: P]: A[P]
}
args: import TypesTypes.type Equals<X, Y> = (<T>() => T extends X
? 1
: 2) extends <T>() => T extends Y ? 1 : 2
? true
: false
Determines if two types are exactly equal at the type level.
When to use
Use to assert type equality in conditional types or type-level tests.
Details
- Uses the
<T>() => T extends X ? 1 : 2 trick for exact equality,
distinguishing between any, unknown, never, and other types.
- Resolves to
true if X and Y are identical, false otherwise.
Example (Checking type equality)
import type { Types } from "effect"
type Yes = Types.Equals<{ a: number }, { a: number }> // true
type No = Types.Equals<{ a: number }, { a: string }> // false
type AnyCheck = Types.Equals<any, string> // false
Equals<type Omit<T, K extends keyof any> = {
[P in Exclude<keyof T, K>]: T[P]
}
Construct a type with the properties of T except for those in type K.
Omit<function (type parameter) A in <A extends Record<string, any>, Success, Error = never, Services = never>(args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof Request<any, any, any> ? never : P]: A[P]; }): Request<Success, Error, Services> & Readonly<A> & {
readonly _tag: Tag;
}
A, keyof interface Request<out A, out E = never, out R = never>A Request<A, E, R> is a request from a data source for a value of type A
that may fail with an E and have requirements of type R.
Example (Defining typed requests)
import type { Request } from "effect"
// Define a request that fetches a user by ID
interface GetUser extends Request.Request<string, Error> {
readonly _tag: "GetUser"
readonly id: number
}
// Define a request that fetches all users
interface GetAllUsers extends Request.Request<ReadonlyArray<string>, Error> {
readonly _tag: "GetAllUsers"
}
Request<unknown, unknown>>, {}> extends true ? void
: { readonly [function (type parameter) PP in keyof function (type parameter) A in <A extends Record<string, any>, Success, Error = never, Services = never>(args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof Request<any, any, any> ? never : P]: A[P]; }): Request<Success, Error, Services> & Readonly<A> & {
readonly _tag: Tag;
}
A as function (type parameter) PP extends "_tag" | keyof interface Request<out A, out E = never, out R = never>A Request<A, E, R> is a request from a data source for a value of type A
that may fail with an E and have requirements of type R.
Example (Defining typed requests)
import type { Request } from "effect"
// Define a request that fetches a user by ID
interface GetUser extends Request.Request<string, Error> {
readonly _tag: "GetUser"
readonly id: number
}
// Define a request that fetches all users
interface GetAllUsers extends Request.Request<ReadonlyArray<string>, Error> {
readonly _tag: "GetAllUsers"
}
Request<any, any, any> ? never : function (type parameter) PP]: function (type parameter) A in <A extends Record<string, any>, Success, Error = never, Services = never>(args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof Request<any, any, any> ? never : P]: A[P]; }): Request<Success, Error, Services> & Readonly<A> & {
readonly _tag: Tag;
}
A[function (type parameter) PP] }
) => interface Request<out A, out E = never, out R = never>A Request<A, E, R> is a request from a data source for a value of type A
that may fail with an E and have requirements of type R.
Example (Defining typed requests)
import type { Request } from "effect"
// Define a request that fetches a user by ID
interface GetUser extends Request.Request<string, Error> {
readonly _tag: "GetUser"
readonly id: number
}
// Define a request that fetches all users
interface GetAllUsers extends Request.Request<ReadonlyArray<string>, Error> {
readonly _tag: "GetAllUsers"
}
Request<function (type parameter) Success in <A extends Record<string, any>, Success, Error = never, Services = never>(args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof Request<any, any, any> ? never : P]: A[P]; }): Request<Success, Error, Services> & Readonly<A> & {
readonly _tag: Tag;
}
Success, function (type parameter) Error in <A extends Record<string, any>, Success, Error = never, Services = never>(args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof Request<any, any, any> ? never : P]: A[P]; }): Request<Success, Error, Services> & Readonly<A> & {
readonly _tag: Tag;
}
Error, function (type parameter) Services in <A extends Record<string, any>, Success, Error = never, Services = never>(args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof Request<any, any, any> ? never : P]: A[P]; }): Request<Success, Error, Services> & Readonly<A> & {
readonly _tag: Tag;
}
Services> & type Readonly<T> = {
readonly [P in keyof T]: T[P]
}
Make all properties in T readonly
Readonly<function (type parameter) A in <A extends Record<string, any>, Success, Error = never, Services = never>(args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof Request<any, any, any> ? never : P]: A[P]; }): Request<Success, Error, Services> & Readonly<A> & {
readonly _tag: Tag;
}
A> & { readonly _tag: Tag extends string_tag: function (type parameter) Tag in <Tag extends string>(tag: Tag): new <A extends Record<string, any>, Success, Error = never, Services = never>(args: Types.Equals<Omit<A, keyof Request<unknown, unknown>>, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" | keyof Request<any, any, any> ? never : P]: A[P]; }) => Request<Success, Error, Services> & Readonly<A> & {
readonly _tag: Tag;
}
Tag } => {
return class function (local class) TaggedClassTaggedClass extends const Class: new <
A extends Record<string, any>,
Success,
Error = never,
Context = never
>(
args: Types.Equals<
Omit<A, keyof Request<unknown, unknown>>,
{}
> extends true
? void
: {
readonly [P in keyof A as P extends keyof Request<
any,
any,
any
>
? never
: P]: A[P]
}
) => Request<Success, Error, Context> &
Readonly<A>
Defines request types with TypeScript classes.
Details
Subclasses pass their data fields to super, and instances are marked as
Request values while retaining the provided readonly fields.
Example (Defining request classes)
import { Request } from "effect"
class GetUser extends Request.Class<{ id: number }, string, Error> {
constructor(readonly id: number) {
super({ id })
}
}
const getUserRequest = new GetUser(123)
console.log(getUserRequest.id) // 123
Class<any, any, any> {
readonly TaggedClass._tag: Tag extends string_tag = tag: Tag extends stringtag
} as any
}