# SchemaDefinition

`import { SchemaDefinition } from "destack:schema";`

Schema definition.

```ds title="SchemaDefinition"
export struct SchemaDefinition<T> {
    kind: SchemaKind;
    type: Type<T>;
    name: string;
    literal: T;
    element: Schema<unknown>;
    count: Schema<unknown>;
    elements: [SchemaElement];
    parameters: [SchemaElement];
    fields: [SchemaField];
    variants: [Schema<unknown>];
    returnType: Schema<unknown>;
    target: Schema<unknown>;
    left: Schema<unknown>;
    right: Schema<unknown>;
    thenSchema: Schema<unknown>;
    elseSchema: Schema<unknown>;
    attributes: [Attribute];
    constraints: [Constraint<T>];
}
```

[language/library/src/schema/schema.ds:123:177](https://github.com/destack-sh/destack/blob/main/language/library/src/schema/schema.ds#L123-L177)

## Members

### `kind: SchemaKind`

Schema kind.

### `type: Type<T>`

Reflected source type when available.

### `name: string`

Stable display name when available.

### `literal: T`

Scalar literal value when this schema describes a literal.

### `element: Schema<unknown>`

Element schema for array-like types.

### `count: Schema<unknown>`

Count schema for fixed-size arrays.

### `elements: [SchemaElement]`

Tuple elements.

### `parameters: [SchemaElement]`

Function parameter schemas.

### `fields: [SchemaField]`

Object fields.

### `variants: [Schema<unknown>]`

Union or intersection variants.

### `returnType: Schema<unknown>`

Return schema for callable types.

### `target: Schema<unknown>`

Target schema for unary type forms.

### `left: Schema<unknown>`

Left schema for binary type forms.

### `right: Schema<unknown>`

Right schema for binary type forms.

### `thenSchema: Schema<unknown>`

True branch schema for conditional types.

### `elseSchema: Schema<unknown>`

False branch schema for conditional types.

### `attributes: [Attribute]`

Schema attributes.

### `constraints: [Constraint<T>]`

Schema constraints.
