Hyperlinkv0.8.0-beta.28

Request

Request.TaggedClassconsteffect/Request.ts:401
<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
constructors
Source effect/Request.ts:40110 lines
export 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 } => {
  return class TaggedClass extends Class<any, any, any> {
    readonly _tag = tag
  } as any
}