(ast: AST): Schema.Annotations.Annotations | undefinedReturns all annotations from the AST node.
Details
If the node has Checks, returns annotations from the last check
(which is where user-supplied annotations end up after .pipe(Schema.annotations(...))).
Otherwise returns Base.annotations directly.
Example (Reading annotations)
import { Schema, SchemaAST } from "effect"
const schema = Schema.String.annotate({ title: "Name" })
const annotations = SchemaAST.resolve(schema.ast)
console.log(annotations?.title) // "Name"export const const resolve: (
ast: AST
) => Schema.Annotations.Annotations | undefined
Returns all annotations from the AST node.
Details
If the node has
Checks
, returns annotations from the last check
(which is where user-supplied annotations end up after .pipe(Schema.annotations(...))).
Otherwise returns Base.annotations directly.
Example (Reading annotations)
import { Schema, SchemaAST } from "effect"
const schema = Schema.String.annotate({ title: "Name" })
const annotations = SchemaAST.resolve(schema.ast)
console.log(annotations?.title) // "Name"
resolve: (ast: ASTast: type AST =
| Declaration
| Null
| Undefined
| Void
| Never
| Unknown
| Any
| String
| Number
| Boolean
| BigInt
| Symbol
| Literal
| UniqueSymbol
| ObjectKeyword
| Enum
| TemplateLiteral
| Arrays
| Objects
| Union<AST>
| Suspend
Discriminated union of all AST node types.
Details
Every Schema has an .ast property of this type. Use the guard functions
(
isString
,
isObjects
, etc.) to narrow to a specific variant,
then access variant-specific fields.
- All variants share the
Base
fields:
annotations, checks,
encoding, context.
- Discriminate on the
_tag field (e.g. "String", "Objects", "Union").
AST) => import SchemaSchema.Annotations.interface Annotations.AnnotationsThis interface is used to define the annotations that can be attached to a
schema. You can extend this interface to define your own annotations.
Details
Note that both a missing key or undefined is used to indicate that the
annotation is not present.
This means that can remove any annotation by setting it to undefined.
Example (Defining your own annotations)
import { Schema } from "effect"
// Extend the Annotations interface with a custom `version` annotation
declare module "effect/Schema" {
namespace Annotations {
interface Annotations {
readonly version?:
| readonly [major: number, minor: number, patch: number]
| undefined
}
}
}
// The `version` annotation is now recognized by the TypeScript compiler
const schema = Schema.String.annotate({ version: [1, 2, 0] })
// const version: readonly [major: number, minor: number, patch: number] | undefined
const version = Schema.resolveAnnotations(schema)?.["version"]
if (version) {
// Access individual parts of the version
console.log(version[1])
// Output: 2
}
Annotations | undefined = import InternalAnnotationsInternalAnnotations.function resolve(
ast: SchemaAST.AST
): Schema.Annotations.Annotations | undefined
resolve