diff --git a/head/schema-cjson/test/inputs/schema/optional-property.schema/default/TopLevel.c b/head/schema-cjson/test/inputs/schema/optional-property.schema/default/TopLevel.c
new file mode 100644
index 0000000..a58059c
--- /dev/null
+++ b/head/schema-cjson/test/inputs/schema/optional-property.schema/default/TopLevel.c
@@ -0,0 +1,65 @@
+/**
+ * TopLevel.c
+ * This file has been autogenerated using quicktype https://github.com/quicktype/quicktype - DO NOT EDIT
+ */
+
+#include "TopLevel.h"
+
+struct TopLevel * cJSON_ParseTopLevel(const char * s) {
+    struct TopLevel * x = NULL;
+    if (NULL != s) {
+        cJSON * j = cJSON_Parse(s);
+        if (NULL != j) {
+            x = cJSON_GetTopLevelValue(j);
+            cJSON_Delete(j);
+        }
+    }
+    return x;
+}
+
+struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j) {
+    struct TopLevel * x = NULL;
+    if (NULL != j) {
+        if (NULL != (x = cJSON_malloc(sizeof(struct TopLevel)))) {
+            memset(x, 0, sizeof(struct TopLevel));
+            if (cJSON_HasObjectItem(j, "value")) {
+                if (!cJSON_IsString(cJSON_GetObjectItemCaseSensitive(j, "value"))) { cJSON_DeleteTopLevel(x); return NULL; }
+                x->value = strdup(cJSON_GetStringValue(cJSON_GetObjectItemCaseSensitive(j, "value")));
+            }
+        }
+    }
+    return x;
+}
+
+cJSON * cJSON_CreateTopLevel(const struct TopLevel * x) {
+    cJSON * j = NULL;
+    if (NULL != x) {
+        if (NULL != (j = cJSON_CreateObject())) {
+            if (NULL != x->value) {
+                cJSON_AddStringToObject(j, "value", x->value);
+            }
+        }
+    }
+    return j;
+}
+
+char * cJSON_PrintTopLevel(const struct TopLevel * x) {
+    char * s = NULL;
+    if (NULL != x) {
+        cJSON * j = cJSON_CreateTopLevel(x);
+        if (NULL != j) {
+            s = cJSON_Print(j);
+            cJSON_Delete(j);
+        }
+    }
+    return s;
+}
+
+void cJSON_DeleteTopLevel(struct TopLevel * x) {
+    if (NULL != x) {
+        if (NULL != x->value) {
+            cJSON_free(x->value);
+        }
+        cJSON_free(x);
+    }
+}
diff --git a/head/schema-cjson/test/inputs/schema/optional-property.schema/default/TopLevel.h b/head/schema-cjson/test/inputs/schema/optional-property.schema/default/TopLevel.h
new file mode 100644
index 0000000..457b0a9
--- /dev/null
+++ b/head/schema-cjson/test/inputs/schema/optional-property.schema/default/TopLevel.h
@@ -0,0 +1,55 @@
+/**
+ * TopLevel.h
+ * This file has been autogenerated using quicktype https://github.com/quicktype/quicktype - DO NOT EDIT
+ * This file depends of https://github.com/DaveGamble/cJSON, https://github.com/joelguittet/c-list and https://github.com/joelguittet/c-hashtable
+ * To parse json data from json string use the following: struct <type> * data = cJSON_Parse<type>(<string>);
+ * To get json data from cJSON object use the following: struct <type> * data = cJSON_Get<type>Value(<cjson>);
+ * To get cJSON object from json data use the following: cJSON * cjson = cJSON_Create<type>(<data>);
+ * To print json string from json data use the following: char * string = cJSON_Print<type>(<data>);
+ * To delete json data use the following: cJSON_Delete<type>(<data>);
+ */
+
+#ifndef __TOPLEVEL_H__
+#define __TOPLEVEL_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <stdint.h>
+#include <stdbool.h>
+#include <stdlib.h>
+#include <string.h>
+#include <regex.h>
+#include <cJSON.h>
+#include <hashtable.h>
+#include <list.h>
+
+#define quicktype_cJSON_Duplicate(j) cJSON_Duplicate(j, true)
+#define cJSON_Integer (1 << 18)
+#define quicktype_cJSON_IsInteger(j) (cJSON_IsNumber(j) && (j)->valuedouble == (int64_t)(j)->valuedouble)
+#ifndef cJSON_Bool
+#define cJSON_Bool (cJSON_True | cJSON_False)
+#endif
+#ifndef cJSON_Map
+#define cJSON_Map (1 << 16)
+#endif
+#ifndef cJSON_Enum
+#define cJSON_Enum (1 << 17)
+#endif
+
+struct TopLevel {
+    char * value;
+};
+
+struct TopLevel * cJSON_ParseTopLevel(const char * s);
+struct TopLevel * cJSON_GetTopLevelValue(const cJSON * j);
+cJSON * cJSON_CreateTopLevel(const struct TopLevel * x);
+char * cJSON_PrintTopLevel(const struct TopLevel * x);
+void cJSON_DeleteTopLevel(struct TopLevel * x);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TOPLEVEL_H__ */
diff --git a/head/schema-csharp/test/inputs/schema/optional-property.schema/default/QuickType.cs b/head/schema-csharp/test/inputs/schema/optional-property.schema/default/QuickType.cs
new file mode 100644
index 0000000..6d93afe
--- /dev/null
+++ b/head/schema-csharp/test/inputs/schema/optional-property.schema/default/QuickType.cs
@@ -0,0 +1,61 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial class TopLevel
+    {
+        [JsonProperty("value", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Value { get; set; }
+    }
+
+    public partial class TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-csharp-records/test/inputs/schema/optional-property.schema/default/QuickType.cs b/head/schema-csharp-records/test/inputs/schema/optional-property.schema/default/QuickType.cs
new file mode 100644
index 0000000..83507fb
--- /dev/null
+++ b/head/schema-csharp-records/test/inputs/schema/optional-property.schema/default/QuickType.cs
@@ -0,0 +1,61 @@
+// <auto-generated />
+//
+// To parse this JSON data, add NuGet 'Newtonsoft.Json' then do:
+//
+//    using QuickType;
+//
+//    var topLevel = TopLevel.FromJson(jsonString);
+#nullable enable
+#pragma warning disable CS8618
+#pragma warning disable CS8601
+#pragma warning disable CS8602
+#pragma warning disable CS8603
+#pragma warning disable CS8604
+#pragma warning disable CS8625
+#pragma warning disable CS8765
+
+namespace QuickType
+{
+    using System;
+    using System.Collections.Generic;
+
+    using System.Globalization;
+    using Newtonsoft.Json;
+    using Newtonsoft.Json.Converters;
+
+    public partial record TopLevel
+    {
+        [JsonProperty("value", Required = Required.DisallowNull, NullValueHandling = NullValueHandling.Ignore)]
+        public string? Value { get; set; }
+    }
+
+    public partial record TopLevel
+    {
+        public static TopLevel FromJson(string json) => JsonConvert.DeserializeObject<TopLevel>(json, QuickType.Converter.Settings);
+    }
+
+    public static partial class Serialize
+    {
+        public static string ToJson(this TopLevel self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
+    }
+
+    internal static partial class Converter
+    {
+        public static readonly JsonSerializerSettings Settings = new JsonSerializerSettings
+        {
+            MetadataPropertyHandling = MetadataPropertyHandling.Ignore,
+            DateParseHandling = DateParseHandling.None,
+            Converters =
+            {
+                new IsoDateTimeConverter { DateTimeStyles = DateTimeStyles.AssumeUniversal }
+            },
+        };
+    }
+}
+#pragma warning restore CS8618
+#pragma warning restore CS8601
+#pragma warning restore CS8602
+#pragma warning restore CS8603
+#pragma warning restore CS8604
+#pragma warning restore CS8625
+#pragma warning restore CS8765
diff --git a/head/schema-flow/test/inputs/schema/optional-property.schema/default/TopLevel.js b/head/schema-flow/test/inputs/schema/optional-property.schema/default/TopLevel.js
new file mode 100644
index 0000000..d01c82f
--- /dev/null
+++ b/head/schema-flow/test/inputs/schema/optional-property.schema/default/TopLevel.js
@@ -0,0 +1,209 @@
+// @flow
+
+// To parse this data:
+//
+//   const Convert = require("./TopLevel");
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export type TopLevel = {
+    value?: string;
+};
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+function toTopLevel(json: string): TopLevel {
+    return cast(JSON.parse(json), r("TopLevel"));
+}
+
+function topLevelToJson(value: TopLevel): string {
+    return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = '') {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "value", js: "value", typ: u(undefined, "") },
+    ], false),
+};
+
+module.exports = {
+    "topLevelToJson": topLevelToJson,
+    "toTopLevel": toTopLevel,
+};
diff --git a/head/schema-javascript/test/inputs/schema/optional-property.schema/default/TopLevel.js b/head/schema-javascript/test/inputs/schema/optional-property.schema/default/TopLevel.js
new file mode 100644
index 0000000..71539e2
--- /dev/null
+++ b/head/schema-javascript/test/inputs/schema/optional-property.schema/default/TopLevel.js
@@ -0,0 +1,203 @@
+// To parse this data:
+//
+//   const Convert = require("./TopLevel");
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+function toTopLevel(json) {
+    return cast(JSON.parse(json), r("TopLevel"));
+}
+
+function topLevelToJson(value) {
+    return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+}
+
+function invalidValue(typ, val, key, parent = '') {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ) {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ) {
+    if (typ.jsonToJS === undefined) {
+        const map = {};
+        typ.props.forEach((p) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ) {
+    if (typ.jsToJSON === undefined) {
+        const map = {};
+        typ.props.forEach((p) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val, typ, getProps, key = '', parent = '') {
+    function transformPrimitive(typ, val) {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs, val) {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases, val) {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ, val) {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val) {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props, additional, val) {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast(val, typ) {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast(val, typ) {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ) {
+    return { literal: typ };
+}
+
+function a(typ) {
+    return { arrayItems: typ };
+}
+
+function i(typ) {
+    return { integer: typ };
+}
+
+function p(pattern) {
+    return { pattern };
+}
+
+function s(typ, min, max) {
+    return { string: typ, min, max };
+}
+
+function n(typ, min, max) {
+    return { number: typ, min, max };
+}
+
+function u(...typs) {
+    return { unionMembers: typs };
+}
+
+function o(props, additional) {
+    return { props, additional };
+}
+
+function m(additional) {
+    const props = [];
+    return { props, additional };
+}
+
+function r(name) {
+    return { ref: name };
+}
+
+const typeMap = {
+    "TopLevel": o([
+        { json: "value", js: "value", typ: u(undefined, "") },
+    ], false),
+};
+
+module.exports = {
+    "topLevelToJson": topLevelToJson,
+    "toTopLevel": toTopLevel,
+};
diff --git a/head/schema-schema/test/inputs/schema/optional-property.schema/default/TopLevel.schema b/head/schema-schema/test/inputs/schema/optional-property.schema/default/TopLevel.schema
new file mode 100644
index 0000000..05fefea
--- /dev/null
+++ b/head/schema-schema/test/inputs/schema/optional-property.schema/default/TopLevel.schema
@@ -0,0 +1,17 @@
+{
+    "$schema": "http://json-schema.org/draft-06/schema#",
+    "$ref": "#/definitions/TopLevel",
+    "definitions": {
+        "TopLevel": {
+            "type": "object",
+            "additionalProperties": false,
+            "properties": {
+                "value": {
+                    "type": "string"
+                }
+            },
+            "required": [],
+            "title": "TopLevel"
+        }
+    }
+}
diff --git a/head/schema-typescript/test/inputs/schema/optional-property.schema/default/TopLevel.ts b/head/schema-typescript/test/inputs/schema/optional-property.schema/default/TopLevel.ts
new file mode 100644
index 0000000..2bf4438
--- /dev/null
+++ b/head/schema-typescript/test/inputs/schema/optional-property.schema/default/TopLevel.ts
@@ -0,0 +1,204 @@
+// To parse this data:
+//
+//   import { Convert, TopLevel } from "./TopLevel";
+//
+//   const topLevel = Convert.toTopLevel(json);
+//
+// These functions will throw an error if the JSON doesn't
+// match the expected interface, even if the JSON is valid.
+
+export interface TopLevel {
+    value?: string;
+}
+
+// Converts JSON strings to/from your types
+// and asserts the results of JSON.parse at runtime
+export class Convert {
+    public static toTopLevel(json: string): TopLevel {
+        return cast(JSON.parse(json), r("TopLevel"));
+    }
+
+    public static topLevelToJson(value: TopLevel): string {
+        return JSON.stringify(uncast(value, r("TopLevel")), null, 2);
+    }
+}
+
+function invalidValue(typ: any, val: any, key: any, parent: any = ''): never {
+    const prettyTyp = prettyTypeName(typ);
+    const parentText = parent ? ` on ${parent}` : '';
+    const keyText = key ? ` for key "${key}"` : '';
+    throw Error(`Invalid value${keyText}${parentText}. Expected ${prettyTyp} but got ${JSON.stringify(val)}`);
+}
+
+function prettyTypeName(typ: any): string {
+    if (Array.isArray(typ)) {
+        if (typ.length === 2 && typ[0] === undefined) {
+            return `an optional ${prettyTypeName(typ[1])}`;
+        } else {
+            return `one of [${typ.map(a => { return prettyTypeName(a); }).join(", ")}]`;
+        }
+    } else if (typeof typ === "object" && typ.literal !== undefined) {
+        return typ.literal;
+    } else {
+        return typeof typ;
+    }
+}
+
+function jsonToJSProps(typ: any): any {
+    if (typ.jsonToJS === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.json] = { key: p.js, typ: p.typ });
+        typ.jsonToJS = map;
+    }
+    return typ.jsonToJS;
+}
+
+function jsToJSONProps(typ: any): any {
+    if (typ.jsToJSON === undefined) {
+        const map: any = {};
+        typ.props.forEach((p: any) => map[p.js] = { key: p.json, typ: p.typ });
+        typ.jsToJSON = map;
+    }
+    return typ.jsToJSON;
+}
+
+function transform(val: any, typ: any, getProps: any, key: any = '', parent: any = ''): any {
+    function transformPrimitive(typ: string, val: any): any {
+        if (typeof typ === typeof val) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+
+    function transformUnion(typs: any[], val: any): any {
+        // val must validate against one typ in typs
+        const l = typs.length;
+        for (let i = 0; i < l; i++) {
+            const typ = typs[i];
+            try {
+                return transform(val, typ, getProps);
+            } catch (_) {}
+        }
+        return invalidValue(typs, val, key, parent);
+    }
+
+    function transformEnum(cases: string[], val: any): any {
+        if (cases.indexOf(val) !== -1) return val;
+        return invalidValue(cases.map(a => { return l(a); }), val, key, parent);
+    }
+
+    function transformArray(typ: any, val: any): any {
+        // val must be an array with no invalid elements
+        if (!Array.isArray(val)) return invalidValue(l("array"), val, key, parent);
+
+        return val.map(el => transform(el, typ, getProps));
+    }
+
+    function transformDate(val: any): any {
+        if (val === null) {
+            return null;
+        }
+        const d = new Date(val);
+        if (isNaN(d.valueOf())) {
+            return invalidValue(l("Date"), val, key, parent);
+        }
+        return d;
+    }
+
+    function transformObject(props: { [k: string]: any }, additional: any, val: any): any {
+        if (val === null || typeof val !== "object" || Array.isArray(val)) {
+            return invalidValue(l(ref || "object"), val, key, parent);
+        }
+        const result: any = {};
+        Object.getOwnPropertyNames(props).forEach(key => {
+            const prop = props[key];
+            const v = Object.prototype.hasOwnProperty.call(val, key) ? val[key] : undefined;
+            result[prop.key] = transform(v, prop.typ, getProps, key, ref);
+        });
+        Object.getOwnPropertyNames(val).forEach(key => {
+            if (!Object.prototype.hasOwnProperty.call(props, key)) {
+                result[key] = transform(val[key], additional, getProps, key, ref);
+            }
+        });
+        return result;
+    }
+
+    if (typ === "any") return val;
+    if (typ === null) {
+        if (val === null) return val;
+        return invalidValue(typ, val, key, parent);
+    }
+    if (typ === false) return invalidValue(typ, val, key, parent);
+    let ref: any = undefined;
+    while (typeof typ === "object" && typ.ref !== undefined) {
+        ref = typ.ref;
+        typ = typeMap[typ.ref];
+    }
+    if (Array.isArray(typ)) return transformEnum(typ, val);
+    if (typeof typ === "object") {
+        return typ.hasOwnProperty("pattern")      ? typeof val === "string" && new RegExp(typ.pattern).test(val) ? val : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("string")       ? typeof val === "string" && (typ.min === undefined || Array.from(val).length >= typ.min) && (typ.max === undefined || Array.from(val).length <= typ.max) ? transform(val, typ.string, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("number")       ? typeof val === "number" && (typ.min === undefined || val >= typ.min) && (typ.max === undefined || val <= typ.max) ? transform(val, typ.number, getProps, key, parent) : invalidValue(typ, val, key, parent)
+            : typ.hasOwnProperty("integer")      ? typeof val === "number" && val % 1 === 0 ? val : invalidValue(l("integer"), val, key, parent)
+            : typ.hasOwnProperty("unionMembers") ? transformUnion(typ.unionMembers, val)
+            : typ.hasOwnProperty("arrayItems")    ? transformArray(typ.arrayItems, val)
+            : typ.hasOwnProperty("props")         ? transformObject(getProps(typ), typ.additional, val)
+            : invalidValue(typ, val, key, parent);
+    }
+    // Numbers can be parsed by Date but shouldn't be.
+    if (typ === Date && typeof val !== "number") return transformDate(val);
+    return transformPrimitive(typ, val);
+}
+
+function cast<T>(val: any, typ: any): T {
+    return transform(val, typ, jsonToJSProps);
+}
+
+function uncast<T>(val: T, typ: any): any {
+    return transform(val, typ, jsToJSONProps);
+}
+
+function l(typ: any) {
+    return { literal: typ };
+}
+
+function a(typ: any) {
+    return { arrayItems: typ };
+}
+
+function i(typ: any) {
+    return { integer: typ };
+}
+
+function p(pattern: any) {
+    return { pattern };
+}
+
+function s(typ: any, min: any, max: any) {
+    return { string: typ, min, max };
+}
+
+function n(typ: any, min: any, max: any) {
+    return { number: typ, min, max };
+}
+
+function u(...typs: any[]) {
+    return { unionMembers: typs };
+}
+
+function o(props: any[], additional: any) {
+    return { props, additional };
+}
+
+function m(additional: any) {
+    const props: any[] = [];
+    return { props, additional };
+}
+
+function r(name: string) {
+    return { ref: name };
+}
+
+const typeMap: any = {
+    "TopLevel": o([
+        { json: "value", js: "value", typ: u(undefined, "") },
+    ], false),
+};
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.ts
index b17ff25..62c166f 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/all-of-additional-properties-false.schema/default/TopLevel.ts
@@ -18,6 +18,6 @@ export type Type = S.Schema.Type<typeof Type>;
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
     "amount": S.Number,
     "frequency": Frequency,
-    "description": S.optional(S.NullOr(S.String)),
+    "description": S.optional(S.String),
     "type": Type,
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/bool-string.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/bool-string.schema/default/TopLevel.ts
index 9cfa949..b698f09 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/bool-string.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/bool-string.schema/default/TopLevel.ts
@@ -7,11 +7,11 @@ export const UnionWithBoolAndEnumEnum = S.Literal(
 export type UnionWithBoolAndEnumEnum = S.Schema.Type<typeof UnionWithBoolAndEnumEnum>;
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "arrNullable": S.optional(S.NullOr(S.Array(S.NullOr(S.Literal("true", "false"))))),
-    "arrOne": S.optional(S.NullOr(S.Array(S.Literal("true", "false")))),
+    "arrNullable": S.optional(S.Array(S.NullOr(S.Literal("true", "false")))),
+    "arrOne": S.optional(S.Array(S.Literal("true", "false"))),
     "nullable": S.NullOr(S.Literal("true", "false")),
     "one": S.Literal("true", "false"),
-    "optional": S.optional(S.NullOr(S.Literal("true", "false"))),
+    "optional": S.optional(S.Literal("true", "false")),
     "unionWithBool": S.Union(S.Boolean, S.transform(S.Literal("true", "false"), S.Boolean, { strict: true, decode: (value) => value === "true", encode: (value) => value ? "true" : "false" })),
     "unionWithBoolAndEnum": S.Union(S.Boolean, S.transform(S.Literal("true", "false"), S.Boolean, { strict: true, decode: (value) => value === "true", encode: (value) => value ? "true" : "false" }), UnionWithBoolAndEnumEnum),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/camelCase.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/camelCase.schema/default/TopLevel.ts
index 91a17a6..6d072cb 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/camelCase.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/camelCase.schema/default/TopLevel.ts
@@ -2,6 +2,6 @@ import * as S from "effect/Schema";
 
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "myProperty": S.optional(S.NullOr(S.String)),
-    "secondProperty": S.optional(S.NullOr(S.String)),
+    "myProperty": S.optional(S.String),
+    "secondProperty": S.optional(S.String),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/class-map-union.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/class-map-union.schema/default/TopLevel.ts
index 728e751..9541109 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/class-map-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/class-map-union.schema/default/TopLevel.ts
@@ -2,9 +2,9 @@ import * as S from "effect/Schema";
 
 
 export class UnionClass extends S.Class<UnionClass>("UnionClass")({
-    "quux": S.optional(S.NullOr(S.Int)),
+    "quux": S.optional(S.Int),
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "union": S.optional(S.NullOr(S.Record({ key: S.String, value: S.Union(S.Boolean, S.Number, S.String, UnionClass)}))),
+    "union": S.optional(S.Record({ key: S.String, value: S.Union(S.Boolean, S.Number, S.String, UnionClass)})),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts
index 65586cb..e29de2c 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/class-with-additional.schema/default/TopLevel.ts
@@ -2,5 +2,5 @@ import * as S from "effect/Schema";
 
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "map": S.optional(S.NullOr(S.Record({ key: S.String, value: S.Union(S.Boolean, S.Number)}))),
+    "map": S.optional(S.Record({ key: S.String, value: S.Union(S.Boolean, S.Number)})),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/comment-injection.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/comment-injection.schema/default/TopLevel.ts
index b4056b7..3413341 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/comment-injection.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/comment-injection.schema/default/TopLevel.ts
@@ -2,8 +2,8 @@ import * as S from "effect/Schema";
 
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "trailingBackslash": S.optional(S.NullOr(S.String)),
-    "trailingQuote": S.optional(S.NullOr(S.String)),
-    "trailingTripleQuote": S.optional(S.NullOr(S.String)),
+    "trailingBackslash": S.optional(S.String),
+    "trailingQuote": S.optional(S.String),
+    "trailingTripleQuote": S.optional(S.String),
     "value": S.String,
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/constructor.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/constructor.schema/default/TopLevel.ts
index ae9e069..0ebfffb 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/constructor.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/constructor.schema/default/TopLevel.ts
@@ -5,5 +5,5 @@ export class Constructor extends S.Class<Constructor>("Constructor")({
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "constructor": S.optional(S.Union(S.Number, Constructor, S.Null)),
+    "constructor": S.optional(S.Union(S.Number, Constructor)),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.ts
index b47dca4..b2f0db9 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/description-with-double-quotes.schema/default/TopLevel.ts
@@ -2,5 +2,5 @@ import * as S from "effect/Schema";
 
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "foo": S.optional(S.NullOr(S.Boolean)),
+    "foo": S.optional(S.Boolean),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/description.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/description.schema/default/TopLevel.ts
index d01c787..9f2cb1d 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/description.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/description.schema/default/TopLevel.ts
@@ -13,9 +13,9 @@ export class ObjectOrStringClass extends S.Class<ObjectOrStringClass>("ObjectOrS
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "bar": S.optional(S.NullOr(S.Boolean)),
+    "bar": S.optional(S.Boolean),
     "enum": Enum,
-    "foo": S.optional(S.NullOr(S.Number)),
+    "foo": S.optional(S.Number),
     "object-or-string": S.Union(S.String, ObjectOrStringClass),
     "union": S.Union(S.Number, S.String),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/enum.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/enum.schema/default/TopLevel.ts
index c8adb59..c0bd5ad 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/enum.schema/default/TopLevel.ts
@@ -25,9 +25,9 @@ export const Lvc = S.Literal(
 export type Lvc = S.Schema.Type<typeof Lvc>;
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "arr": S.optional(S.NullOr(S.Array(S.Union(OtherArr, S.Int)))),
-    "for": S.optional(S.NullOr(S.String)),
+    "arr": S.optional(S.Array(S.Union(OtherArr, S.Int))),
+    "for": S.optional(S.String),
     "gve": Gve,
-    "lvc": S.optional(S.NullOr(Lvc)),
-    "otherArr": S.optional(S.NullOr(S.Array(OtherArr))),
+    "lvc": S.optional(Lvc),
+    "otherArr": S.optional(S.Array(OtherArr)),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/implicit-one-of.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/implicit-one-of.schema/default/TopLevel.ts
index 71e0fcc..1df0a92 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/implicit-one-of.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/implicit-one-of.schema/default/TopLevel.ts
@@ -3,6 +3,6 @@ import * as S from "effect/Schema";
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
     "foo": S.Int,
-    "bar": S.optional(S.NullOr(S.Boolean)),
-    "quux": S.optional(S.NullOr(S.String)),
+    "bar": S.optional(S.Boolean),
+    "quux": S.optional(S.String),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/integer-string.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/integer-string.schema/default/TopLevel.ts
index 17acf94..fb45acd 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/integer-string.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/integer-string.schema/default/TopLevel.ts
@@ -7,11 +7,11 @@ export const UnionWithIntAndEnumEnum = S.Literal(
 export type UnionWithIntAndEnumEnum = S.Schema.Type<typeof UnionWithIntAndEnumEnum>;
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "arrNullable": S.optional(S.NullOr(S.Array(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))))),
-    "arrOne": S.optional(S.NullOr(S.Array(S.String.pipe(S.pattern(/^-?\d+$/))))),
+    "arrNullable": S.optional(S.Array(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/))))),
+    "arrOne": S.optional(S.Array(S.String.pipe(S.pattern(/^-?\d+$/)))),
     "nullable": S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/))),
     "one": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "optional": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "optional": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "unionWithInt": S.Union(S.Int, S.NumberFromString.pipe(S.int())),
     "unionWithIntAndEnum": S.Union(UnionWithIntAndEnumEnum, S.Int, S.NumberFromString.pipe(S.int())),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/intersection-nested.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/intersection-nested.schema/default/TopLevel.ts
index 66f8a31..e7799cf 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/intersection-nested.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/intersection-nested.schema/default/TopLevel.ts
@@ -2,5 +2,5 @@ import * as S from "effect/Schema";
 
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "intersection": S.optional(S.NullOr(S.Number)),
+    "intersection": S.optional(S.Number),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/intersection.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/intersection.schema/default/TopLevel.ts
index 41404d1..945ec66 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/intersection.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/intersection.schema/default/TopLevel.ts
@@ -3,9 +3,9 @@ import * as S from "effect/Schema";
 
 export class Intersection extends S.Class<Intersection>("Intersection")({
     "foo": S.Number,
-    "bar": S.optional(S.NullOr(S.String)),
+    "bar": S.optional(S.String),
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "intersection": S.optional(S.NullOr(Intersection)),
+    "intersection": S.optional(Intersection),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
index 49e4dd2..2ca6565 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/keyword-enum.schema/default/TopLevel.ts
@@ -283,5 +283,5 @@ export const Enum = S.Literal(
 export type Enum = S.Schema.Type<typeof Enum>;
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "enum": S.optional(S.NullOr(Enum)),
+    "enum": S.optional(Enum),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
index 4e26d4f..3bb7185 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/keyword-unions.schema/default/TopLevel.ts
@@ -830,281 +830,281 @@ export class Abstract extends S.Class<Abstract>("Abstract")({
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "_": S.optional(S.Union(S.Number, Empty, S.Null)),
-    "_Bool": S.optional(S.Union(S.Number, BoolClass, S.Null)),
-    "_Complex": S.optional(S.Union(S.Number, Complex, S.Null)),
-    "_Imaginery": S.optional(S.Union(S.Number, Imaginery, S.Null)),
-    "abstract": S.optional(S.Union(S.Number, Abstract, S.Null)),
-    "alignas": S.optional(S.Union(S.Number, Alignas, S.Null)),
-    "alignof": S.optional(S.Union(S.Number, Alignof, S.Null)),
-    "and": S.optional(S.Union(S.Number, And, S.Null)),
-    "and_eq": S.optional(S.Union(S.Number, AndEq, S.Null)),
-    "any": S.optional(S.Union(S.Number, AnyClass, S.Null)),
-    "Any": S.optional(S.Union(S.Number, Any, S.Null)),
-    "array": S.optional(S.Union(S.Number, ArrayClass, S.Null)),
-    "as": S.optional(S.Union(S.Number, As, S.Null)),
-    "asm": S.optional(S.Union(S.Number, Asm, S.Null)),
-    "assert": S.optional(S.Union(S.Number, Assert, S.Null)),
-    "associatedtype": S.optional(S.Union(S.Number, Associatedtype, S.Null)),
-    "associativity": S.optional(S.Union(S.Number, Associativity, S.Null)),
-    "async": S.optional(S.Union(S.Number, Async, S.Null)),
-    "atomic": S.optional(S.Union(S.Number, Atomic, S.Null)),
-    "atomic_cancel": S.optional(S.Union(S.Number, AtomicCancel, S.Null)),
-    "atomic_commit": S.optional(S.Union(S.Number, AtomicCommit, S.Null)),
-    "atomic_noexcept": S.optional(S.Union(S.Number, AtomicNoexcept, S.Null)),
-    "auto": S.optional(S.Union(S.Number, Auto, S.Null)),
-    "await": S.optional(S.Union(S.Number, Await, S.Null)),
-    "base": S.optional(S.Union(S.Number, Base, S.Null)),
-    "bitand": S.optional(S.Union(S.Number, Bitand, S.Null)),
-    "bitor": S.optional(S.Union(S.Number, Bitor, S.Null)),
-    "BOOL": S.optional(S.Union(S.Number, Bool, S.Null)),
-    "bool": S.optional(S.Union(S.Number, UnionBoolBool, S.Null)),
-    "boolean": S.optional(S.Union(S.Number, Boolean, S.Null)),
-    "break": S.optional(S.Union(S.Number, Break, S.Null)),
-    "bycopy": S.optional(S.Union(S.Number, Bycopy, S.Null)),
-    "byref": S.optional(S.Union(S.Number, Byref, S.Null)),
-    "byte": S.optional(S.Union(S.Number, Byte, S.Null)),
-    "case": S.optional(S.Union(S.Number, Case, S.Null)),
-    "catch": S.optional(S.Union(S.Number, Catch, S.Null)),
-    "chan": S.optional(S.Union(S.Number, Chan, S.Null)),
-    "char": S.optional(S.Union(S.Number, Char, S.Null)),
-    "char16_t": S.optional(S.Union(S.Number, Char16T, S.Null)),
-    "char32_t": S.optional(S.Union(S.Number, Char32T, S.Null)),
-    "checked": S.optional(S.Union(S.Number, Checked, S.Null)),
-    "class": S.optional(S.Union(S.Number, UnionClassClass, S.Null)),
-    "Class": S.optional(S.Union(S.Number, ClassClass, S.Null)),
-    "co_await": S.optional(S.Union(S.Number, CoAwait, S.Null)),
-    "co_return": S.optional(S.Union(S.Number, CoReturn, S.Null)),
-    "co_yield": S.optional(S.Union(S.Number, CoYield, S.Null)),
-    "compl": S.optional(S.Union(S.Number, Compl, S.Null)),
-    "concept": S.optional(S.Union(S.Number, Concept, S.Null)),
-    "console": S.optional(S.Union(S.Number, Console, S.Null)),
-    "const": S.optional(S.Union(S.Number, Const, S.Null)),
-    "const_cast": S.optional(S.Union(S.Number, ConstCast, S.Null)),
-    "constexpr": S.optional(S.Union(S.Number, Constexpr, S.Null)),
-    "constructor": S.optional(S.Union(S.Number, Constructor, S.Null)),
-    "continue": S.optional(S.Union(S.Number, Continue, S.Null)),
-    "convenience": S.optional(S.Union(S.Number, Convenience, S.Null)),
-    "convert": S.optional(S.Union(S.Number, Convert, S.Null)),
-    "converter": S.optional(S.Union(S.Number, Converter, S.Null)),
-    "date": S.optional(S.Union(S.Number, DateClass, S.Null)),
-    "date_parse_handling": S.optional(S.Union(S.Number, DateParseHandling, S.Null)),
-    "debugger": S.optional(S.Union(S.Number, Debugger, S.Null)),
-    "decimal": S.optional(S.Union(S.Number, Decimal, S.Null)),
-    "declare": S.optional(S.Union(S.Number, Declare, S.Null)),
-    "decltype": S.optional(S.Union(S.Number, Decltype, S.Null)),
-    "decode_string": S.optional(S.Union(S.Number, DecodeString, S.Null)),
-    "def": S.optional(S.Union(S.Number, Def, S.Null)),
-    "default": S.optional(S.Union(S.Number, Default, S.Null)),
-    "defer": S.optional(S.Union(S.Number, Defer, S.Null)),
-    "deinit": S.optional(S.Union(S.Number, Deinit, S.Null)),
-    "del": S.optional(S.Union(S.Number, Del, S.Null)),
-    "delegate": S.optional(S.Union(S.Number, Delegate, S.Null)),
-    "delete": S.optional(S.Union(S.Number, Delete, S.Null)),
-    "dict": S.optional(S.Union(S.Number, Dict, S.Null)),
-    "dictionary": S.optional(S.Union(S.Number, Dictionary, S.Null)),
-    "didSet": S.optional(S.Union(S.Number, DidSet, S.Null)),
-    "do": S.optional(S.Union(S.Number, Do, S.Null)),
-    "double": S.optional(S.Union(S.Number, Double, S.Null)),
-    "dummy": S.optional(S.NullOr(S.Number)),
-    "dynamic": S.optional(S.Union(S.Number, Dynamic, S.Null)),
-    "dynamic_cast": S.optional(S.Union(S.Number, DynamicCast, S.Null)),
-    "elif": S.optional(S.Union(S.Number, Elif, S.Null)),
-    "else": S.optional(S.Union(S.Number, Else, S.Null)),
-    "encode_quick_type": S.optional(S.Union(S.Number, EncodeQuickType, S.Null)),
-    "enum": S.optional(S.Union(S.Number, Enum, S.Null)),
-    "event": S.optional(S.Union(S.Number, Event, S.Null)),
-    "except": S.optional(S.Union(S.Number, Except, S.Null)),
-    "exception": S.optional(S.Union(S.Number, Exception, S.Null)),
-    "explicit": S.optional(S.Union(S.Number, Explicit, S.Null)),
-    "export": S.optional(S.Union(S.Number, Export, S.Null)),
-    "exposing": S.optional(S.Union(S.Number, Exposing, S.Null)),
-    "extends": S.optional(S.Union(S.Number, Extends, S.Null)),
-    "extension": S.optional(S.Union(S.Number, Extension, S.Null)),
-    "extern": S.optional(S.Union(S.Number, Extern, S.Null)),
-    "fallthrough": S.optional(S.Union(S.Number, Fallthrough, S.Null)),
-    "false": S.optional(S.Union(S.Number, FalseClass, S.Null)),
-    "False": S.optional(S.Union(S.Number, False, S.Null)),
-    "fileprivate": S.optional(S.Union(S.Number, Fileprivate, S.Null)),
-    "final": S.optional(S.Union(S.Number, Final, S.Null)),
-    "finally": S.optional(S.Union(S.Number, Finally, S.Null)),
-    "fixed": S.optional(S.Union(S.Number, Fixed, S.Null)),
-    "float": S.optional(S.Union(S.Number, Float, S.Null)),
-    "for": S.optional(S.Union(S.Number, For, S.Null)),
-    "foreach": S.optional(S.Union(S.Number, Foreach, S.Null)),
-    "friend": S.optional(S.Union(S.Number, Friend, S.Null)),
-    "from": S.optional(S.Union(S.Number, From, S.Null)),
-    "from_json": S.optional(S.Union(S.Number, FromJson, S.Null)),
-    "func": S.optional(S.Union(S.Number, Func, S.Null)),
-    "function": S.optional(S.Union(S.Number, Function, S.Null)),
-    "get": S.optional(S.Union(S.Number, Get, S.Null)),
-    "global": S.optional(S.Union(S.Number, Global, S.Null)),
-    "go": S.optional(S.Union(S.Number, Go, S.Null)),
-    "goto": S.optional(S.Union(S.Number, Goto, S.Null)),
-    "guard": S.optional(S.Union(S.Number, Guard, S.Null)),
-    "hasOwnProperty": S.optional(S.Union(S.Number, HasOwnProperty, S.Null)),
-    "id": S.optional(S.Union(S.Number, Id, S.Null)),
-    "if": S.optional(S.Union(S.Number, If, S.Null)),
-    "IMP": S.optional(S.Union(S.Number, Imp, S.Null)),
-    "implements": S.optional(S.Union(S.Number, Implements, S.Null)),
-    "implicit": S.optional(S.Union(S.Number, Implicit, S.Null)),
-    "import": S.optional(S.Union(S.Number, Import, S.Null)),
-    "in": S.optional(S.Union(S.Number, In, S.Null)),
-    "indirect": S.optional(S.Union(S.Number, Indirect, S.Null)),
-    "infix": S.optional(S.Union(S.Number, Infix, S.Null)),
-    "init": S.optional(S.Union(S.Number, Init, S.Null)),
-    "inline": S.optional(S.Union(S.Number, Inline, S.Null)),
-    "inout": S.optional(S.Union(S.Number, Inout, S.Null)),
-    "instanceof": S.optional(S.Union(S.Number, Instanceof, S.Null)),
-    "int": S.optional(S.Union(S.Number, Int, S.Null)),
-    "interface": S.optional(S.Union(S.Number, Interface, S.Null)),
-    "internal": S.optional(S.Union(S.Number, Internal, S.Null)),
-    "is": S.optional(S.Union(S.Number, Is, S.Null)),
-    "iterable": S.optional(S.Union(S.Number, Iterable, S.Null)),
-    "jdec": S.optional(S.Union(S.Number, Jdec, S.Null)),
-    "jenc": S.optional(S.Union(S.Number, Jenc, S.Null)),
-    "jpipe": S.optional(S.Union(S.Number, Jpipe, S.Null)),
-    "json": S.optional(S.Union(S.Number, Json, S.Null)),
-    "json_converter": S.optional(S.Union(S.Number, JsonConverter, S.Null)),
-    "json_serializer": S.optional(S.Union(S.Number, JsonSerializer, S.Null)),
-    "json_token": S.optional(S.Union(S.Number, JsonToken, S.Null)),
-    "json_writer": S.optional(S.Union(S.Number, JsonWriter, S.Null)),
-    "lambda": S.optional(S.Union(S.Number, Lambda, S.Null)),
-    "lazy": S.optional(S.Union(S.Number, Lazy, S.Null)),
-    "left": S.optional(S.Union(S.Number, Left, S.Null)),
-    "let": S.optional(S.Union(S.Number, Let, S.Null)),
-    "list": S.optional(S.Union(S.Number, List, S.Null)),
-    "lock": S.optional(S.Union(S.Number, Lock, S.Null)),
-    "long": S.optional(S.Union(S.Number, Long, S.Null)),
-    "map": S.optional(S.Union(S.Number, Map, S.Null)),
-    "metadata_property_handling": S.optional(S.Union(S.Number, MetadataPropertyHandling, S.Null)),
-    "module": S.optional(S.Union(S.Number, Module, S.Null)),
-    "mutable": S.optional(S.Union(S.Number, Mutable, S.Null)),
-    "mutating": S.optional(S.Union(S.Number, Mutating, S.Null)),
-    "namespace": S.optional(S.Union(S.Number, Namespace, S.Null)),
-    "native": S.optional(S.Union(S.Number, Native, S.Null)),
-    "new": S.optional(S.Union(S.Number, New, S.Null)),
-    "newtonsoft": S.optional(S.Union(S.Number, Newtonsoft, S.Null)),
-    "nil": S.optional(S.Union(S.Number, Nil, S.Null)),
-    "NO": S.optional(S.Union(S.Number, No, S.Null)),
-    "noexcept": S.optional(S.Union(S.Number, Noexcept, S.Null)),
-    "nonatomic": S.optional(S.Union(S.Number, Nonatomic, S.Null)),
-    "none": S.optional(S.Union(S.Number, NoneClass, S.Null)),
-    "None": S.optional(S.Union(S.Number, None, S.Null)),
-    "nonlocal": S.optional(S.Union(S.Number, Nonlocal, S.Null)),
-    "nonmutating": S.optional(S.Union(S.Number, Nonmutating, S.Null)),
-    "not": S.optional(S.Union(S.Number, Not, S.Null)),
-    "not_eq": S.optional(S.Union(S.Number, NotEq, S.Null)),
-    "NSString": S.optional(S.Union(S.Number, NsString, S.Null)),
-    "NULL": S.optional(S.Union(S.Number, Null, S.Null)),
-    "null": S.optional(S.Union(S.Number, NullClass, S.Null)),
-    "nullptr": S.optional(S.Union(S.Number, Nullptr, S.Null)),
-    "number": S.optional(S.Union(S.Number, Number, S.Null)),
-    "object": S.optional(S.Union(S.Number, ObjectClass, S.Null)),
-    "of": S.optional(S.Union(S.Number, Of, S.Null)),
-    "oneway": S.optional(S.Union(S.Number, Oneway, S.Null)),
-    "open": S.optional(S.Union(S.Number, Open, S.Null)),
-    "operator": S.optional(S.Union(S.Number, Operator, S.Null)),
-    "optional": S.optional(S.Union(S.Number, Optional, S.Null)),
-    "or": S.optional(S.Union(S.Number, Or, S.Null)),
-    "or_eq": S.optional(S.Union(S.Number, OrEq, S.Null)),
-    "out": S.optional(S.Union(S.Number, Out, S.Null)),
-    "override": S.optional(S.Union(S.Number, Override, S.Null)),
-    "package": S.optional(S.Union(S.Number, Package, S.Null)),
-    "params": S.optional(S.Union(S.Number, Params, S.Null)),
-    "pass": S.optional(S.Union(S.Number, Pass, S.Null)),
-    "port": S.optional(S.Union(S.Number, Port, S.Null)),
-    "postfix": S.optional(S.Union(S.Number, Postfix, S.Null)),
-    "precedence": S.optional(S.Union(S.Number, Precedence, S.Null)),
-    "prefix": S.optional(S.Union(S.Number, Prefix, S.Null)),
-    "print": S.optional(S.Union(S.Number, Print, S.Null)),
-    "printf": S.optional(S.Union(S.Number, Printf, S.Null)),
-    "private": S.optional(S.Union(S.Number, Private, S.Null)),
-    "protected": S.optional(S.Union(S.Number, Protected, S.Null)),
-    "Protocol": S.optional(S.Union(S.Number, Protocol, S.Null)),
-    "protocol": S.optional(S.Union(S.Number, ProtocolClass, S.Null)),
-    "public": S.optional(S.Union(S.Number, Public, S.Null)),
-    "quicktype": S.optional(S.Union(S.Number, Quicktype, S.Null)),
-    "raise": S.optional(S.Union(S.Number, Raise, S.Null)),
-    "range": S.optional(S.Union(S.Number, Range, S.Null)),
-    "readonly": S.optional(S.Union(S.Number, Readonly, S.Null)),
-    "ref": S.optional(S.Union(S.Number, Ref, S.Null)),
-    "register": S.optional(S.Union(S.Number, Register, S.Null)),
-    "reinterpret_cast": S.optional(S.Union(S.Number, ReinterpretCast, S.Null)),
-    "repeat": S.optional(S.Union(S.Number, Repeat, S.Null)),
-    "require": S.optional(S.Union(S.Number, Require, S.Null)),
-    "required": S.optional(S.Union(S.Number, Required, S.Null)),
-    "requires": S.optional(S.Union(S.Number, Requires, S.Null)),
-    "restrict": S.optional(S.Union(S.Number, Restrict, S.Null)),
-    "retain": S.optional(S.Union(S.Number, Retain, S.Null)),
-    "rethrows": S.optional(S.Union(S.Number, Rethrows, S.Null)),
-    "return": S.optional(S.Union(S.Number, Return, S.Null)),
-    "right": S.optional(S.Union(S.Number, Right, S.Null)),
-    "sbyte": S.optional(S.Union(S.Number, Sbyte, S.Null)),
-    "sealed": S.optional(S.Union(S.Number, Sealed, S.Null)),
-    "SEL": S.optional(S.Union(S.Number, Sel, S.Null)),
-    "select": S.optional(S.Union(S.Number, Select, S.Null)),
-    "Self": S.optional(S.Union(S.Number, Self, S.Null)),
-    "self": S.optional(S.Union(S.Number, SelfClass, S.Null)),
-    "serialize": S.optional(S.Union(S.Number, Serialize, S.Null)),
-    "set": S.optional(S.Union(S.Number, Set, S.Null)),
-    "short": S.optional(S.Union(S.Number, Short, S.Null)),
-    "signed": S.optional(S.Union(S.Number, Signed, S.Null)),
-    "sizeof": S.optional(S.Union(S.Number, Sizeof, S.Null)),
-    "stackalloc": S.optional(S.Union(S.Number, Stackalloc, S.Null)),
-    "static": S.optional(S.Union(S.Number, Static, S.Null)),
-    "static_assert": S.optional(S.Union(S.Number, StaticAssert, S.Null)),
-    "static_cast": S.optional(S.Union(S.Number, StaticCast, S.Null)),
-    "strictfp": S.optional(S.Union(S.Number, Strictfp, S.Null)),
-    "string": S.optional(S.Union(S.Number, StringClass, S.Null)),
-    "struct": S.optional(S.Union(S.Number, Struct, S.Null)),
-    "subscript": S.optional(S.Union(S.Number, Subscript, S.Null)),
-    "super": S.optional(S.Union(S.Number, Super, S.Null)),
-    "switch": S.optional(S.Union(S.Number, Switch, S.Null)),
-    "symbol": S.optional(S.Union(S.Number, Symbol, S.Null)),
-    "synchronized": S.optional(S.Union(S.Number, Synchronized, S.Null)),
-    "system": S.optional(S.Union(S.Number, System, S.Null)),
-    "template": S.optional(S.Union(S.Number, Template, S.Null)),
-    "then": S.optional(S.Union(S.Number, Then, S.Null)),
-    "this": S.optional(S.Union(S.Number, This, S.Null)),
-    "thread_local": S.optional(S.Union(S.Number, ThreadLocal, S.Null)),
-    "throw": S.optional(S.Union(S.Number, Throw, S.Null)),
-    "throws": S.optional(S.Union(S.Number, Throws, S.Null)),
-    "to_json": S.optional(S.Union(S.Number, ToJson, S.Null)),
-    "top_level": S.optional(S.Union(S.Number, TopLevelClass, S.Null)),
-    "transient": S.optional(S.Union(S.Number, Transient, S.Null)),
-    "True": S.optional(S.Union(S.Number, True, S.Null)),
-    "true": S.optional(S.Union(S.Number, TrueClass, S.Null)),
-    "try": S.optional(S.Union(S.Number, Try, S.Null)),
-    "Type": S.optional(S.Union(S.Number, Type, S.Null)),
-    "type": S.optional(S.Union(S.Number, TypeClass, S.Null)),
-    "typealias": S.optional(S.Union(S.Number, Typealias, S.Null)),
-    "typedef": S.optional(S.Union(S.Number, Typedef, S.Null)),
-    "typeid": S.optional(S.Union(S.Number, Typeid, S.Null)),
-    "typename": S.optional(S.Union(S.Number, Typename, S.Null)),
-    "typeof": S.optional(S.Union(S.Number, Typeof, S.Null)),
-    "uint": S.optional(S.Union(S.Number, Uint, S.Null)),
-    "ulong": S.optional(S.Union(S.Number, Ulong, S.Null)),
-    "unchecked": S.optional(S.Union(S.Number, Unchecked, S.Null)),
-    "undefined": S.optional(S.Union(S.Number, Undefined, S.Null)),
-    "union": S.optional(S.Union(S.Number, Union, S.Null)),
-    "unowned": S.optional(S.Union(S.Number, Unowned, S.Null)),
-    "unsafe": S.optional(S.Union(S.Number, Unsafe, S.Null)),
-    "unsigned": S.optional(S.Union(S.Number, Unsigned, S.Null)),
-    "ushort": S.optional(S.Union(S.Number, Ushort, S.Null)),
-    "using": S.optional(S.Union(S.Number, Using, S.Null)),
-    "var": S.optional(S.Union(S.Number, Var, S.Null)),
-    "virtual": S.optional(S.Union(S.Number, Virtual, S.Null)),
-    "void": S.optional(S.Union(S.Number, Void, S.Null)),
-    "volatile": S.optional(S.Union(S.Number, Volatile, S.Null)),
-    "wchar_t": S.optional(S.Union(S.Number, WcharT, S.Null)),
-    "weak": S.optional(S.Union(S.Number, Weak, S.Null)),
-    "where": S.optional(S.Union(S.Number, Where, S.Null)),
-    "while": S.optional(S.Union(S.Number, While, S.Null)),
-    "willSet": S.optional(S.Union(S.Number, WillSet, S.Null)),
-    "with": S.optional(S.Union(S.Number, With, S.Null)),
-    "xor": S.optional(S.Union(S.Number, Xor, S.Null)),
-    "xor_eq": S.optional(S.Union(S.Number, XorEq, S.Null)),
-    "YES": S.optional(S.Union(S.Number, Yes, S.Null)),
-    "yield": S.optional(S.Union(S.Number, Yield, S.Null)),
+    "_": S.optional(S.Union(S.Number, Empty)),
+    "_Bool": S.optional(S.Union(S.Number, BoolClass)),
+    "_Complex": S.optional(S.Union(S.Number, Complex)),
+    "_Imaginery": S.optional(S.Union(S.Number, Imaginery)),
+    "abstract": S.optional(S.Union(S.Number, Abstract)),
+    "alignas": S.optional(S.Union(S.Number, Alignas)),
+    "alignof": S.optional(S.Union(S.Number, Alignof)),
+    "and": S.optional(S.Union(S.Number, And)),
+    "and_eq": S.optional(S.Union(S.Number, AndEq)),
+    "any": S.optional(S.Union(S.Number, AnyClass)),
+    "Any": S.optional(S.Union(S.Number, Any)),
+    "array": S.optional(S.Union(S.Number, ArrayClass)),
+    "as": S.optional(S.Union(S.Number, As)),
+    "asm": S.optional(S.Union(S.Number, Asm)),
+    "assert": S.optional(S.Union(S.Number, Assert)),
+    "associatedtype": S.optional(S.Union(S.Number, Associatedtype)),
+    "associativity": S.optional(S.Union(S.Number, Associativity)),
+    "async": S.optional(S.Union(S.Number, Async)),
+    "atomic": S.optional(S.Union(S.Number, Atomic)),
+    "atomic_cancel": S.optional(S.Union(S.Number, AtomicCancel)),
+    "atomic_commit": S.optional(S.Union(S.Number, AtomicCommit)),
+    "atomic_noexcept": S.optional(S.Union(S.Number, AtomicNoexcept)),
+    "auto": S.optional(S.Union(S.Number, Auto)),
+    "await": S.optional(S.Union(S.Number, Await)),
+    "base": S.optional(S.Union(S.Number, Base)),
+    "bitand": S.optional(S.Union(S.Number, Bitand)),
+    "bitor": S.optional(S.Union(S.Number, Bitor)),
+    "BOOL": S.optional(S.Union(S.Number, Bool)),
+    "bool": S.optional(S.Union(S.Number, UnionBoolBool)),
+    "boolean": S.optional(S.Union(S.Number, Boolean)),
+    "break": S.optional(S.Union(S.Number, Break)),
+    "bycopy": S.optional(S.Union(S.Number, Bycopy)),
+    "byref": S.optional(S.Union(S.Number, Byref)),
+    "byte": S.optional(S.Union(S.Number, Byte)),
+    "case": S.optional(S.Union(S.Number, Case)),
+    "catch": S.optional(S.Union(S.Number, Catch)),
+    "chan": S.optional(S.Union(S.Number, Chan)),
+    "char": S.optional(S.Union(S.Number, Char)),
+    "char16_t": S.optional(S.Union(S.Number, Char16T)),
+    "char32_t": S.optional(S.Union(S.Number, Char32T)),
+    "checked": S.optional(S.Union(S.Number, Checked)),
+    "class": S.optional(S.Union(S.Number, UnionClassClass)),
+    "Class": S.optional(S.Union(S.Number, ClassClass)),
+    "co_await": S.optional(S.Union(S.Number, CoAwait)),
+    "co_return": S.optional(S.Union(S.Number, CoReturn)),
+    "co_yield": S.optional(S.Union(S.Number, CoYield)),
+    "compl": S.optional(S.Union(S.Number, Compl)),
+    "concept": S.optional(S.Union(S.Number, Concept)),
+    "console": S.optional(S.Union(S.Number, Console)),
+    "const": S.optional(S.Union(S.Number, Const)),
+    "const_cast": S.optional(S.Union(S.Number, ConstCast)),
+    "constexpr": S.optional(S.Union(S.Number, Constexpr)),
+    "constructor": S.optional(S.Union(S.Number, Constructor)),
+    "continue": S.optional(S.Union(S.Number, Continue)),
+    "convenience": S.optional(S.Union(S.Number, Convenience)),
+    "convert": S.optional(S.Union(S.Number, Convert)),
+    "converter": S.optional(S.Union(S.Number, Converter)),
+    "date": S.optional(S.Union(S.Number, DateClass)),
+    "date_parse_handling": S.optional(S.Union(S.Number, DateParseHandling)),
+    "debugger": S.optional(S.Union(S.Number, Debugger)),
+    "decimal": S.optional(S.Union(S.Number, Decimal)),
+    "declare": S.optional(S.Union(S.Number, Declare)),
+    "decltype": S.optional(S.Union(S.Number, Decltype)),
+    "decode_string": S.optional(S.Union(S.Number, DecodeString)),
+    "def": S.optional(S.Union(S.Number, Def)),
+    "default": S.optional(S.Union(S.Number, Default)),
+    "defer": S.optional(S.Union(S.Number, Defer)),
+    "deinit": S.optional(S.Union(S.Number, Deinit)),
+    "del": S.optional(S.Union(S.Number, Del)),
+    "delegate": S.optional(S.Union(S.Number, Delegate)),
+    "delete": S.optional(S.Union(S.Number, Delete)),
+    "dict": S.optional(S.Union(S.Number, Dict)),
+    "dictionary": S.optional(S.Union(S.Number, Dictionary)),
+    "didSet": S.optional(S.Union(S.Number, DidSet)),
+    "do": S.optional(S.Union(S.Number, Do)),
+    "double": S.optional(S.Union(S.Number, Double)),
+    "dummy": S.optional(S.Number),
+    "dynamic": S.optional(S.Union(S.Number, Dynamic)),
+    "dynamic_cast": S.optional(S.Union(S.Number, DynamicCast)),
+    "elif": S.optional(S.Union(S.Number, Elif)),
+    "else": S.optional(S.Union(S.Number, Else)),
+    "encode_quick_type": S.optional(S.Union(S.Number, EncodeQuickType)),
+    "enum": S.optional(S.Union(S.Number, Enum)),
+    "event": S.optional(S.Union(S.Number, Event)),
+    "except": S.optional(S.Union(S.Number, Except)),
+    "exception": S.optional(S.Union(S.Number, Exception)),
+    "explicit": S.optional(S.Union(S.Number, Explicit)),
+    "export": S.optional(S.Union(S.Number, Export)),
+    "exposing": S.optional(S.Union(S.Number, Exposing)),
+    "extends": S.optional(S.Union(S.Number, Extends)),
+    "extension": S.optional(S.Union(S.Number, Extension)),
+    "extern": S.optional(S.Union(S.Number, Extern)),
+    "fallthrough": S.optional(S.Union(S.Number, Fallthrough)),
+    "false": S.optional(S.Union(S.Number, FalseClass)),
+    "False": S.optional(S.Union(S.Number, False)),
+    "fileprivate": S.optional(S.Union(S.Number, Fileprivate)),
+    "final": S.optional(S.Union(S.Number, Final)),
+    "finally": S.optional(S.Union(S.Number, Finally)),
+    "fixed": S.optional(S.Union(S.Number, Fixed)),
+    "float": S.optional(S.Union(S.Number, Float)),
+    "for": S.optional(S.Union(S.Number, For)),
+    "foreach": S.optional(S.Union(S.Number, Foreach)),
+    "friend": S.optional(S.Union(S.Number, Friend)),
+    "from": S.optional(S.Union(S.Number, From)),
+    "from_json": S.optional(S.Union(S.Number, FromJson)),
+    "func": S.optional(S.Union(S.Number, Func)),
+    "function": S.optional(S.Union(S.Number, Function)),
+    "get": S.optional(S.Union(S.Number, Get)),
+    "global": S.optional(S.Union(S.Number, Global)),
+    "go": S.optional(S.Union(S.Number, Go)),
+    "goto": S.optional(S.Union(S.Number, Goto)),
+    "guard": S.optional(S.Union(S.Number, Guard)),
+    "hasOwnProperty": S.optional(S.Union(S.Number, HasOwnProperty)),
+    "id": S.optional(S.Union(S.Number, Id)),
+    "if": S.optional(S.Union(S.Number, If)),
+    "IMP": S.optional(S.Union(S.Number, Imp)),
+    "implements": S.optional(S.Union(S.Number, Implements)),
+    "implicit": S.optional(S.Union(S.Number, Implicit)),
+    "import": S.optional(S.Union(S.Number, Import)),
+    "in": S.optional(S.Union(S.Number, In)),
+    "indirect": S.optional(S.Union(S.Number, Indirect)),
+    "infix": S.optional(S.Union(S.Number, Infix)),
+    "init": S.optional(S.Union(S.Number, Init)),
+    "inline": S.optional(S.Union(S.Number, Inline)),
+    "inout": S.optional(S.Union(S.Number, Inout)),
+    "instanceof": S.optional(S.Union(S.Number, Instanceof)),
+    "int": S.optional(S.Union(S.Number, Int)),
+    "interface": S.optional(S.Union(S.Number, Interface)),
+    "internal": S.optional(S.Union(S.Number, Internal)),
+    "is": S.optional(S.Union(S.Number, Is)),
+    "iterable": S.optional(S.Union(S.Number, Iterable)),
+    "jdec": S.optional(S.Union(S.Number, Jdec)),
+    "jenc": S.optional(S.Union(S.Number, Jenc)),
+    "jpipe": S.optional(S.Union(S.Number, Jpipe)),
+    "json": S.optional(S.Union(S.Number, Json)),
+    "json_converter": S.optional(S.Union(S.Number, JsonConverter)),
+    "json_serializer": S.optional(S.Union(S.Number, JsonSerializer)),
+    "json_token": S.optional(S.Union(S.Number, JsonToken)),
+    "json_writer": S.optional(S.Union(S.Number, JsonWriter)),
+    "lambda": S.optional(S.Union(S.Number, Lambda)),
+    "lazy": S.optional(S.Union(S.Number, Lazy)),
+    "left": S.optional(S.Union(S.Number, Left)),
+    "let": S.optional(S.Union(S.Number, Let)),
+    "list": S.optional(S.Union(S.Number, List)),
+    "lock": S.optional(S.Union(S.Number, Lock)),
+    "long": S.optional(S.Union(S.Number, Long)),
+    "map": S.optional(S.Union(S.Number, Map)),
+    "metadata_property_handling": S.optional(S.Union(S.Number, MetadataPropertyHandling)),
+    "module": S.optional(S.Union(S.Number, Module)),
+    "mutable": S.optional(S.Union(S.Number, Mutable)),
+    "mutating": S.optional(S.Union(S.Number, Mutating)),
+    "namespace": S.optional(S.Union(S.Number, Namespace)),
+    "native": S.optional(S.Union(S.Number, Native)),
+    "new": S.optional(S.Union(S.Number, New)),
+    "newtonsoft": S.optional(S.Union(S.Number, Newtonsoft)),
+    "nil": S.optional(S.Union(S.Number, Nil)),
+    "NO": S.optional(S.Union(S.Number, No)),
+    "noexcept": S.optional(S.Union(S.Number, Noexcept)),
+    "nonatomic": S.optional(S.Union(S.Number, Nonatomic)),
+    "none": S.optional(S.Union(S.Number, NoneClass)),
+    "None": S.optional(S.Union(S.Number, None)),
+    "nonlocal": S.optional(S.Union(S.Number, Nonlocal)),
+    "nonmutating": S.optional(S.Union(S.Number, Nonmutating)),
+    "not": S.optional(S.Union(S.Number, Not)),
+    "not_eq": S.optional(S.Union(S.Number, NotEq)),
+    "NSString": S.optional(S.Union(S.Number, NsString)),
+    "NULL": S.optional(S.Union(S.Number, Null)),
+    "null": S.optional(S.Union(S.Number, NullClass)),
+    "nullptr": S.optional(S.Union(S.Number, Nullptr)),
+    "number": S.optional(S.Union(S.Number, Number)),
+    "object": S.optional(S.Union(S.Number, ObjectClass)),
+    "of": S.optional(S.Union(S.Number, Of)),
+    "oneway": S.optional(S.Union(S.Number, Oneway)),
+    "open": S.optional(S.Union(S.Number, Open)),
+    "operator": S.optional(S.Union(S.Number, Operator)),
+    "optional": S.optional(S.Union(S.Number, Optional)),
+    "or": S.optional(S.Union(S.Number, Or)),
+    "or_eq": S.optional(S.Union(S.Number, OrEq)),
+    "out": S.optional(S.Union(S.Number, Out)),
+    "override": S.optional(S.Union(S.Number, Override)),
+    "package": S.optional(S.Union(S.Number, Package)),
+    "params": S.optional(S.Union(S.Number, Params)),
+    "pass": S.optional(S.Union(S.Number, Pass)),
+    "port": S.optional(S.Union(S.Number, Port)),
+    "postfix": S.optional(S.Union(S.Number, Postfix)),
+    "precedence": S.optional(S.Union(S.Number, Precedence)),
+    "prefix": S.optional(S.Union(S.Number, Prefix)),
+    "print": S.optional(S.Union(S.Number, Print)),
+    "printf": S.optional(S.Union(S.Number, Printf)),
+    "private": S.optional(S.Union(S.Number, Private)),
+    "protected": S.optional(S.Union(S.Number, Protected)),
+    "Protocol": S.optional(S.Union(S.Number, Protocol)),
+    "protocol": S.optional(S.Union(S.Number, ProtocolClass)),
+    "public": S.optional(S.Union(S.Number, Public)),
+    "quicktype": S.optional(S.Union(S.Number, Quicktype)),
+    "raise": S.optional(S.Union(S.Number, Raise)),
+    "range": S.optional(S.Union(S.Number, Range)),
+    "readonly": S.optional(S.Union(S.Number, Readonly)),
+    "ref": S.optional(S.Union(S.Number, Ref)),
+    "register": S.optional(S.Union(S.Number, Register)),
+    "reinterpret_cast": S.optional(S.Union(S.Number, ReinterpretCast)),
+    "repeat": S.optional(S.Union(S.Number, Repeat)),
+    "require": S.optional(S.Union(S.Number, Require)),
+    "required": S.optional(S.Union(S.Number, Required)),
+    "requires": S.optional(S.Union(S.Number, Requires)),
+    "restrict": S.optional(S.Union(S.Number, Restrict)),
+    "retain": S.optional(S.Union(S.Number, Retain)),
+    "rethrows": S.optional(S.Union(S.Number, Rethrows)),
+    "return": S.optional(S.Union(S.Number, Return)),
+    "right": S.optional(S.Union(S.Number, Right)),
+    "sbyte": S.optional(S.Union(S.Number, Sbyte)),
+    "sealed": S.optional(S.Union(S.Number, Sealed)),
+    "SEL": S.optional(S.Union(S.Number, Sel)),
+    "select": S.optional(S.Union(S.Number, Select)),
+    "Self": S.optional(S.Union(S.Number, Self)),
+    "self": S.optional(S.Union(S.Number, SelfClass)),
+    "serialize": S.optional(S.Union(S.Number, Serialize)),
+    "set": S.optional(S.Union(S.Number, Set)),
+    "short": S.optional(S.Union(S.Number, Short)),
+    "signed": S.optional(S.Union(S.Number, Signed)),
+    "sizeof": S.optional(S.Union(S.Number, Sizeof)),
+    "stackalloc": S.optional(S.Union(S.Number, Stackalloc)),
+    "static": S.optional(S.Union(S.Number, Static)),
+    "static_assert": S.optional(S.Union(S.Number, StaticAssert)),
+    "static_cast": S.optional(S.Union(S.Number, StaticCast)),
+    "strictfp": S.optional(S.Union(S.Number, Strictfp)),
+    "string": S.optional(S.Union(S.Number, StringClass)),
+    "struct": S.optional(S.Union(S.Number, Struct)),
+    "subscript": S.optional(S.Union(S.Number, Subscript)),
+    "super": S.optional(S.Union(S.Number, Super)),
+    "switch": S.optional(S.Union(S.Number, Switch)),
+    "symbol": S.optional(S.Union(S.Number, Symbol)),
+    "synchronized": S.optional(S.Union(S.Number, Synchronized)),
+    "system": S.optional(S.Union(S.Number, System)),
+    "template": S.optional(S.Union(S.Number, Template)),
+    "then": S.optional(S.Union(S.Number, Then)),
+    "this": S.optional(S.Union(S.Number, This)),
+    "thread_local": S.optional(S.Union(S.Number, ThreadLocal)),
+    "throw": S.optional(S.Union(S.Number, Throw)),
+    "throws": S.optional(S.Union(S.Number, Throws)),
+    "to_json": S.optional(S.Union(S.Number, ToJson)),
+    "top_level": S.optional(S.Union(S.Number, TopLevelClass)),
+    "transient": S.optional(S.Union(S.Number, Transient)),
+    "True": S.optional(S.Union(S.Number, True)),
+    "true": S.optional(S.Union(S.Number, TrueClass)),
+    "try": S.optional(S.Union(S.Number, Try)),
+    "Type": S.optional(S.Union(S.Number, Type)),
+    "type": S.optional(S.Union(S.Number, TypeClass)),
+    "typealias": S.optional(S.Union(S.Number, Typealias)),
+    "typedef": S.optional(S.Union(S.Number, Typedef)),
+    "typeid": S.optional(S.Union(S.Number, Typeid)),
+    "typename": S.optional(S.Union(S.Number, Typename)),
+    "typeof": S.optional(S.Union(S.Number, Typeof)),
+    "uint": S.optional(S.Union(S.Number, Uint)),
+    "ulong": S.optional(S.Union(S.Number, Ulong)),
+    "unchecked": S.optional(S.Union(S.Number, Unchecked)),
+    "undefined": S.optional(S.Union(S.Number, Undefined)),
+    "union": S.optional(S.Union(S.Number, Union)),
+    "unowned": S.optional(S.Union(S.Number, Unowned)),
+    "unsafe": S.optional(S.Union(S.Number, Unsafe)),
+    "unsigned": S.optional(S.Union(S.Number, Unsigned)),
+    "ushort": S.optional(S.Union(S.Number, Ushort)),
+    "using": S.optional(S.Union(S.Number, Using)),
+    "var": S.optional(S.Union(S.Number, Var)),
+    "virtual": S.optional(S.Union(S.Number, Virtual)),
+    "void": S.optional(S.Union(S.Number, Void)),
+    "volatile": S.optional(S.Union(S.Number, Volatile)),
+    "wchar_t": S.optional(S.Union(S.Number, WcharT)),
+    "weak": S.optional(S.Union(S.Number, Weak)),
+    "where": S.optional(S.Union(S.Number, Where)),
+    "while": S.optional(S.Union(S.Number, While)),
+    "willSet": S.optional(S.Union(S.Number, WillSet)),
+    "with": S.optional(S.Union(S.Number, With)),
+    "xor": S.optional(S.Union(S.Number, Xor)),
+    "xor_eq": S.optional(S.Union(S.Number, XorEq)),
+    "YES": S.optional(S.Union(S.Number, Yes)),
+    "yield": S.optional(S.Union(S.Number, Yield)),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/list.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/list.schema/default/TopLevel.ts
index b7624c9..8ea105d 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/list.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/list.schema/default/TopLevel.ts
@@ -2,5 +2,5 @@ import * as S from "effect/Schema";
 
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "next": S.optional(S.NullOr(S.suspend(() => TopLevel))),
+    "next": S.optional(S.suspend(() => TopLevel)),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/mutually-recursive.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/mutually-recursive.schema/default/TopLevel.ts
index 570cd1b..4eab191 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/mutually-recursive.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/mutually-recursive.schema/default/TopLevel.ts
@@ -1,10 +1,10 @@
 import * as S from "effect/Schema";
 
 
-export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "bar": S.optional(S.NullOr(S.suspend(() => Bar))),
+export class Bar extends S.Class<Bar>("Bar")({
+    "foo": S.Union(S.Array(S.suspend(() => TopLevel)), S.suspend(() => TopLevel)),
 }) {}
 
-export class Bar extends S.Class<Bar>("Bar")({
-    "foo": S.Union(S.Array(TopLevel), TopLevel),
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "bar": S.optional(Bar),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.ts
index 1c09945..8f4b680 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/nested-intersection-union.schema/default/TopLevel.ts
@@ -2,10 +2,10 @@ import * as S from "effect/Schema";
 
 
 export class Item extends S.Class<Item>("Item")({
-    "content": S.optional(S.NullOr(S.String)),
-    "id": S.optional(S.NullOr(S.String)),
-    "output": S.optional(S.NullOr(S.String)),
-    "summary": S.optional(S.NullOr(S.String)),
+    "content": S.optional(S.String),
+    "id": S.optional(S.String),
+    "output": S.optional(S.String),
+    "summary": S.optional(S.String),
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/object-type-required.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/object-type-required.schema/default/TopLevel.ts
index 1b934ed..82844e8 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/object-type-required.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/object-type-required.schema/default/TopLevel.ts
@@ -3,5 +3,5 @@ import * as S from "effect/Schema";
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
     "foo": S.String,
-    "bar": S.optional(S.NullOr(S.String)),
+    "bar": S.optional(S.String),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts
index c8b647c..8128af5 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/optional-const-ref.schema/default/TopLevel.ts
@@ -7,11 +7,11 @@ export class Coordinate extends S.Class<Coordinate>("Coordinate")({
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "coordinates": S.optional(S.NullOr(S.Array(Coordinate))),
-    "count": S.optional(S.NullOr(S.Int.pipe(S.greaterThanOrEqualTo(1)).pipe(S.lessThanOrEqualTo(100)))),
-    "label": S.optional(S.NullOr(S.String.pipe(S.filter(value => Array.from(value).length >= 2)).pipe(S.filter(value => Array.from(value).length <= 16)))),
+    "coordinates": S.optional(S.Array(Coordinate)),
+    "count": S.optional(S.Int.pipe(S.greaterThanOrEqualTo(1)).pipe(S.lessThanOrEqualTo(100))),
+    "label": S.optional(S.String.pipe(S.filter(value => Array.from(value).length >= 2)).pipe(S.filter(value => Array.from(value).length <= 16))),
     "requiredCoordinates": S.Array(Coordinate),
     "requiredCount": S.Int.pipe(S.greaterThanOrEqualTo(1)).pipe(S.lessThanOrEqualTo(100)),
     "requiredLabel": S.String.pipe(S.filter(value => Array.from(value).length >= 2)).pipe(S.filter(value => Array.from(value).length <= 16)),
-    "weight": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0.5)).pipe(S.lessThanOrEqualTo(99.5)))),
+    "weight": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0.5)).pipe(S.lessThanOrEqualTo(99.5))),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts
index 725ba7f..3bfad8e 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/optional-constraints.schema/default/TopLevel.ts
@@ -2,9 +2,9 @@ import * as S from "effect/Schema";
 
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "optDouble": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0.5)).pipe(S.lessThanOrEqualTo(99.5)))),
-    "optInt": S.optional(S.NullOr(S.Int.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(100)))),
-    "optPattern": S.optional(S.NullOr(S.String.pipe(S.pattern(new RegExp("^[a-z]+$"))))),
-    "optString": S.optional(S.NullOr(S.String.pipe(S.filter(value => Array.from(value).length >= 3)).pipe(S.filter(value => Array.from(value).length <= 10)))),
+    "optDouble": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0.5)).pipe(S.lessThanOrEqualTo(99.5))),
+    "optInt": S.optional(S.Int.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(100))),
+    "optPattern": S.optional(S.String.pipe(S.pattern(new RegExp("^[a-z]+$")))),
+    "optString": S.optional(S.String.pipe(S.filter(value => Array.from(value).length >= 3)).pipe(S.filter(value => Array.from(value).length <= 10))),
     "reqZeroMin": S.Int.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(100)),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts
index b63c5fe..fa0c9a1 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/optional-date-time.schema/default/TopLevel.ts
@@ -2,9 +2,9 @@ import * as S from "effect/Schema";
 
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "optional-date": S.optional(S.NullOr(S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)))),
-    "optional-date-time": S.optional(S.NullOr(S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)))),
-    "optional-time": S.optional(S.NullOr(S.String.pipe(S.pattern(/^\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)))),
+    "optional-date": S.optional(S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/))),
+    "optional-date-time": S.optional(S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/))),
+    "optional-time": S.optional(S.String.pipe(S.pattern(/^\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/))),
     "required-date": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)),
     "required-date-time": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)),
     "required-time": S.String.pipe(S.pattern(/^\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)),
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/optional-enum.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/optional-enum.schema/default/TopLevel.ts
index 755c4b9..ae31ebb 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/optional-enum.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/optional-enum.schema/default/TopLevel.ts
@@ -9,5 +9,5 @@ export type Shortcut = S.Schema.Type<typeof Shortcut>;
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
     "name": S.String,
-    "shortcut": S.optional(S.NullOr(Shortcut)),
+    "shortcut": S.optional(Shortcut),
 }) {}
diff --git a/head/schema-typescript-effect-schema/test/inputs/schema/optional-property.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/optional-property.schema/default/TopLevel.ts
new file mode 100644
index 0000000..28e1139
--- /dev/null
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/optional-property.schema/default/TopLevel.ts
@@ -0,0 +1,6 @@
+import * as S from "effect/Schema";
+
+
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "value": S.optional(S.String),
+}) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/postman-collection.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/postman-collection.schema/default/TopLevel.ts
index 9f7eb50..1a7a8b2 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/postman-collection.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/postman-collection.schema/default/TopLevel.ts
@@ -2,11 +2,11 @@ import * as S from "effect/Schema";
 
 
 export class Response extends S.Class<Response>("Response")({
-    "body": S.optional(S.NullOr(S.String)),
+    "body": S.optional(S.String),
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "item": S.optional(S.NullOr(S.Array(S.suspend(() => TopLevel)))),
-    "name": S.optional(S.NullOr(S.String)),
-    "response": S.optional(S.NullOr(S.Array(Response))),
+    "item": S.optional(S.Array(S.suspend(() => TopLevel))),
+    "name": S.optional(S.String),
+    "response": S.optional(S.Array(Response)),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/ref-remote.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/ref-remote.schema/default/TopLevel.ts
index b7624c9..8ea105d 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/ref-remote.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/ref-remote.schema/default/TopLevel.ts
@@ -2,5 +2,5 @@ import * as S from "effect/Schema";
 
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "next": S.optional(S.NullOr(S.suspend(() => TopLevel))),
+    "next": S.optional(S.suspend(() => TopLevel)),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts
index 2437c9f..a8ff8db 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/renaming-bug.schema/default/TopLevel.ts
@@ -26,75 +26,75 @@ export const Name = S.Literal(
 export type Name = S.Schema.Type<typeof Name>;
 
 export class VehicleType extends S.Class<VehicleType>("VehicleType")({
-    "name": S.optional(S.NullOr(Name)),
-    "width": S.optional(S.NullOr(Axis)),
-    "length": S.optional(S.NullOr(Axis)),
+    "name": S.optional(Name),
+    "width": S.optional(Axis),
+    "length": S.optional(Axis),
 }) {}
 
 export class Limit extends S.Class<Limit>("Limit")({
-    "maximum": S.optional(S.NullOr(S.Number)),
-    "minimum": S.optional(S.NullOr(S.Number)),
+    "maximum": S.optional(S.Number),
+    "minimum": S.optional(S.Number),
 }) {}
 
 export class Speed extends S.Class<Speed>("Speed")({
-    "velocity": S.optional(S.NullOr(Limit)),
+    "velocity": S.optional(Limit),
 }) {}
 
 export class Vehicle extends S.Class<Vehicle>("Vehicle")({
-    "brand": S.optional(S.NullOr(S.String)),
-    "id": S.optional(S.NullOr(S.String.pipe(S.filter(value => Array.from(value).length >= 1)))),
-    "speed": S.optional(S.NullOr(Speed)),
-    "subModule": S.optional(S.NullOr(S.Boolean)),
-    "type": S.optional(S.NullOr(VehicleType)),
-    "year": S.optional(S.NullOr(S.String)),
+    "brand": S.optional(S.String),
+    "id": S.optional(S.String.pipe(S.filter(value => Array.from(value).length >= 1))),
+    "speed": S.optional(Speed),
+    "subModule": S.optional(S.Boolean),
+    "type": S.optional(VehicleType),
+    "year": S.optional(S.String),
 }) {}
 
 export class History extends S.Class<History>("History")({
-    "class": S.optional(S.NullOr(S.String)),
+    "class": S.optional(S.String),
 }) {}
 
 export class Part extends S.Class<Part>("Part")({
-    "depth": S.optional(S.NullOr(S.String)),
-    "length": S.optional(S.NullOr(S.String)),
-    "width": S.optional(S.NullOr(S.String)),
+    "depth": S.optional(S.String),
+    "length": S.optional(S.String),
+    "width": S.optional(S.String),
 }) {}
 
 export class RectShape extends S.Class<RectShape>("RectShape")({
-    "parts": S.optional(S.NullOr(S.Array(Part))),
+    "parts": S.optional(S.Array(Part)),
 }) {}
 
 export class CircularShape extends S.Class<CircularShape>("CircularShape")({
-    "shapeName": S.optional(S.NullOr(S.String)),
+    "shapeName": S.optional(S.String),
 }) {}
 
 export class Geometry extends S.Class<Geometry>("Geometry")({
-    "rectShape": S.optional(S.NullOr(RectShape)),
-    "circularShape": S.optional(S.NullOr(S.Array(CircularShape))),
+    "rectShape": S.optional(RectShape),
+    "circularShape": S.optional(S.Array(CircularShape)),
 }) {}
 
 export class Shape extends S.Class<Shape>("Shape")({
-    "geometry": S.optional(S.NullOr(Geometry)),
-    "history": S.optional(S.NullOr(History)),
+    "geometry": S.optional(Geometry),
+    "history": S.optional(History),
 }) {}
 
 export class Color extends S.Class<Color>("Color")({
-    "rgb": S.optional(S.NullOr(S.Number)),
+    "rgb": S.optional(S.Number),
 }) {}
 
 export class Berry extends S.Class<Berry>("Berry")({
-    "color": S.optional(S.NullOr(Color)),
-    "name": S.optional(S.NullOr(S.String.pipe(S.filter(value => Array.from(value).length >= 1)))),
-    "shapes": S.optional(S.NullOr(S.Array(Shape))),
+    "color": S.optional(Color),
+    "name": S.optional(S.String.pipe(S.filter(value => Array.from(value).length >= 1))),
+    "shapes": S.optional(S.Array(Shape)),
 }) {}
 
 export class Fruit extends S.Class<Fruit>("Fruit")({
-    "apple": S.optional(S.NullOr(S.Boolean)),
-    "berries": S.optional(S.NullOr(S.Array(Berry))),
-    "orange": S.optional(S.NullOr(S.Boolean)),
+    "apple": S.optional(S.Boolean),
+    "berries": S.optional(S.Array(Berry)),
+    "orange": S.optional(S.Boolean),
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "version": S.optional(S.NullOr(S.String.pipe(S.pattern(new RegExp("^\\d{1,5}.{1}\\d{1,5}.{1}\\d{1,5}$"))))),
-    "fruits": S.optional(S.NullOr(S.Array(Fruit))),
-    "vehicles": S.optional(S.NullOr(S.Array(Vehicle))),
+    "version": S.optional(S.String.pipe(S.pattern(new RegExp("^\\d{1,5}.{1}\\d{1,5}.{1}\\d{1,5}$")))),
+    "fruits": S.optional(S.Array(Fruit)),
+    "vehicles": S.optional(S.Array(Vehicle)),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/simple-ref.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/simple-ref.schema/default/TopLevel.ts
index b7624c9..8ea105d 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/simple-ref.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/simple-ref.schema/default/TopLevel.ts
@@ -2,5 +2,5 @@ import * as S from "effect/Schema";
 
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "next": S.optional(S.NullOr(S.suspend(() => TopLevel))),
+    "next": S.optional(S.suspend(() => TopLevel)),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts
index 0da46f9..8180834 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/unevaluated-properties.schema/default/TopLevel.ts
@@ -11,10 +11,10 @@ export class ClosedClass extends S.Class<ClosedClass>("ClosedClass")({
 
 export class Config extends S.Class<Config>("Config")({
     "closed": S.optional(S.Union(S.Array(S.Any), S.Boolean, S.Number, S.Int, S.String, ClosedClass, S.Null)),
-    "name": S.optional(S.NullOr(S.String)),
-    "settings": S.optional(S.NullOr(S.Record({ key: S.String, value: S.Array(Item)}))),
+    "name": S.optional(S.String),
+    "settings": S.optional(S.Record({ key: S.String, value: S.Array(Item)})),
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "config": S.optional(S.NullOr(Config)),
+    "config": S.optional(Config),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/union.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/union.schema/default/TopLevel.ts
index a76c4be..3ab3f13 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/union.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/union.schema/default/TopLevel.ts
@@ -2,9 +2,9 @@ import * as S from "effect/Schema";
 
 
 export class TopLevelElement extends S.Class<TopLevelElement>("TopLevelElement")({
-    "one": S.optional(S.NullOr(S.Int)),
+    "one": S.optional(S.Int),
     "two": S.Boolean,
-    "three": S.optional(S.NullOr(S.Number)),
+    "three": S.optional(S.Number),
 }) {}
 
 export const TopLevel = S.Array(TopLevelElement);
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/uuid.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/uuid.schema/default/TopLevel.ts
index 409726f..acc758c 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/uuid.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/uuid.schema/default/TopLevel.ts
@@ -7,10 +7,10 @@ export const UnionWithEnumEnum = S.Literal(
 export type UnionWithEnumEnum = S.Schema.Type<typeof UnionWithEnumEnum>;
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "arrNullable": S.optional(S.NullOr(S.Array(S.NullOr(S.UUID)))),
-    "arrOne": S.optional(S.NullOr(S.Array(S.UUID))),
+    "arrNullable": S.optional(S.Array(S.NullOr(S.UUID))),
+    "arrOne": S.optional(S.Array(S.UUID)),
     "nullable": S.NullOr(S.UUID),
     "one": S.UUID,
-    "optional": S.optional(S.NullOr(S.UUID)),
+    "optional": S.optional(S.UUID),
     "unionWithEnum": S.Union(UnionWithEnumEnum, S.UUID),
 }) {}
diff --git a/base/schema-typescript-effect-schema/test/inputs/schema/vega-lite.schema/default/TopLevel.ts b/head/schema-typescript-effect-schema/test/inputs/schema/vega-lite.schema/default/TopLevel.ts
index c16000c..513d181 100644
--- a/base/schema-typescript-effect-schema/test/inputs/schema/vega-lite.schema/default/TopLevel.ts
+++ b/head/schema-typescript-effect-schema/test/inputs/schema/vega-lite.schema/default/TopLevel.ts
@@ -588,8 +588,8 @@ export const SelectionDefType = S.Literal(
 export type SelectionDefType = S.Schema.Type<typeof SelectionDefType>;
 
 export class Repeat extends S.Class<Repeat>("Repeat")({
-    "column": S.optional(S.NullOr(S.Array(S.String))),
-    "row": S.optional(S.NullOr(S.Array(S.String))),
+    "column": S.optional(S.Array(S.String)),
+    "row": S.optional(S.Array(S.String)),
 }) {}
 
 export class AggregatedFieldDef extends S.Class<AggregatedFieldDef>("AggregatedFieldDef")({
@@ -598,320 +598,229 @@ export class AggregatedFieldDef extends S.Class<AggregatedFieldDef>("AggregatedF
     "op": AggregateOp,
 }) {}
 
-export class Transform extends S.Class<Transform>("Transform")({
-    "filter": S.optional(S.Union(S.String, S.suspend(() => Predicate), S.Null)),
-    "as": S.optional(S.Union(S.Array(S.String), S.String, S.Null)),
-    "calculate": S.optional(S.NullOr(S.String)),
-    "default": S.optional(S.NullOr(S.String)),
-    "from": S.optional(S.NullOr(S.suspend(() => LookupData))),
-    "lookup": S.optional(S.NullOr(S.String)),
-    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams), S.Null)),
-    "field": S.optional(S.NullOr(S.String)),
-    "timeUnit": S.optional(S.NullOr(TimeUnit)),
-    "aggregate": S.optional(S.NullOr(S.Array(AggregatedFieldDef))),
-    "groupby": S.optional(S.NullOr(S.Array(S.String))),
-}) {}
-
 export class TitleParams extends S.Class<TitleParams>("TitleParams")({
-    "anchor": S.optional(S.NullOr(Anchor)),
-    "offset": S.optional(S.NullOr(S.Number)),
-    "orient": S.optional(S.NullOr(TitleOrient)),
-    "style": S.optional(S.Union(S.Array(S.String), S.String, S.Null)),
+    "anchor": S.optional(Anchor),
+    "offset": S.optional(S.Number),
+    "orient": S.optional(TitleOrient),
+    "style": S.optional(S.Union(S.Array(S.String), S.String)),
     "text": S.String,
 }) {}
 
-export class SelectionDef extends S.Class<SelectionDef>("SelectionDef")({
-    "bind": S.optional(S.Union(BindEnum, S.Record({ key: S.String, value: S.suspend(() => VgBinding)}), S.Null)),
-    "empty": S.optional(S.NullOr(Empty)),
-    "encodings": S.optional(S.NullOr(S.Array(SingleDefChannel))),
-    "fields": S.optional(S.NullOr(S.Array(S.String))),
-    "nearest": S.optional(S.NullOr(S.Boolean)),
-    "on": S.optional(S.Any),
-    "resolve": S.optional(S.NullOr(SelectionResolution)),
-    "type": SelectionDefType,
-    "toggle": S.optional(S.Union(S.Boolean, S.String, S.Null)),
-    "mark": S.optional(S.NullOr(S.suspend(() => BrushConfig))),
-    "translate": S.optional(S.Union(S.Boolean, S.String, S.Null)),
-    "zoom": S.optional(S.Union(S.Boolean, S.String, S.Null)),
-}) {}
-
 export class ScaleResolveMap extends S.Class<ScaleResolveMap>("ScaleResolveMap")({
-    "color": S.optional(S.NullOr(ResolveMode)),
-    "opacity": S.optional(S.NullOr(ResolveMode)),
-    "shape": S.optional(S.NullOr(ResolveMode)),
-    "size": S.optional(S.NullOr(ResolveMode)),
-    "x": S.optional(S.NullOr(ResolveMode)),
-    "y": S.optional(S.NullOr(ResolveMode)),
+    "color": S.optional(ResolveMode),
+    "opacity": S.optional(ResolveMode),
+    "shape": S.optional(ResolveMode),
+    "size": S.optional(ResolveMode),
+    "x": S.optional(ResolveMode),
+    "y": S.optional(ResolveMode),
 }) {}
 
 export class LegendResolveMap extends S.Class<LegendResolveMap>("LegendResolveMap")({
-    "color": S.optional(S.NullOr(ResolveMode)),
-    "opacity": S.optional(S.NullOr(ResolveMode)),
-    "shape": S.optional(S.NullOr(ResolveMode)),
-    "size": S.optional(S.NullOr(ResolveMode)),
+    "color": S.optional(ResolveMode),
+    "opacity": S.optional(ResolveMode),
+    "shape": S.optional(ResolveMode),
+    "size": S.optional(ResolveMode),
 }) {}
 
 export class AxisResolveMap extends S.Class<AxisResolveMap>("AxisResolveMap")({
-    "x": S.optional(S.NullOr(ResolveMode)),
-    "y": S.optional(S.NullOr(ResolveMode)),
+    "x": S.optional(ResolveMode),
+    "y": S.optional(ResolveMode),
 }) {}
 
 export class Resolve extends S.Class<Resolve>("Resolve")({
-    "axis": S.optional(S.NullOr(AxisResolveMap)),
-    "legend": S.optional(S.NullOr(LegendResolveMap)),
-    "scale": S.optional(S.NullOr(ScaleResolveMap)),
+    "axis": S.optional(AxisResolveMap),
+    "legend": S.optional(LegendResolveMap),
+    "scale": S.optional(ScaleResolveMap),
 }) {}
 
 export class Projection extends S.Class<Projection>("Projection")({
-    "center": S.optional(S.NullOr(S.Array(S.Number))),
-    "clipAngle": S.optional(S.NullOr(S.Number)),
-    "clipExtent": S.optional(S.NullOr(S.Array(S.Array(S.Number)))),
-    "coefficient": S.optional(S.NullOr(S.Number)),
-    "distance": S.optional(S.NullOr(S.Number)),
-    "fraction": S.optional(S.NullOr(S.Number)),
-    "lobes": S.optional(S.NullOr(S.Number)),
-    "parallel": S.optional(S.NullOr(S.Number)),
-    "precision": S.optional(S.NullOr(S.Record({ key: S.String, value: S.Union(S.Number, S.String)}))),
-    "radius": S.optional(S.NullOr(S.Number)),
-    "ratio": S.optional(S.NullOr(S.Number)),
-    "rotate": S.optional(S.NullOr(S.Array(S.Number))),
-    "spacing": S.optional(S.NullOr(S.Number)),
-    "tilt": S.optional(S.NullOr(S.Number)),
-    "type": S.optional(S.NullOr(VgProjectionType)),
+    "center": S.optional(S.Array(S.Number)),
+    "clipAngle": S.optional(S.Number),
+    "clipExtent": S.optional(S.Array(S.Array(S.Number))),
+    "coefficient": S.optional(S.Number),
+    "distance": S.optional(S.Number),
+    "fraction": S.optional(S.Number),
+    "lobes": S.optional(S.Number),
+    "parallel": S.optional(S.Number),
+    "precision": S.optional(S.Record({ key: S.String, value: S.Union(S.Number, S.String)})),
+    "radius": S.optional(S.Number),
+    "ratio": S.optional(S.Number),
+    "rotate": S.optional(S.Array(S.Number)),
+    "spacing": S.optional(S.Number),
+    "tilt": S.optional(S.Number),
+    "type": S.optional(VgProjectionType),
 }) {}
 
 export class MarkDef extends S.Class<MarkDef>("MarkDef")({
-    "align": S.optional(S.NullOr(HorizontalAlign)),
-    "angle": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(360)))),
-    "baseline": S.optional(S.NullOr(VerticalAlign)),
-    "clip": S.optional(S.NullOr(S.Boolean)),
-    "color": S.optional(S.NullOr(S.String)),
-    "cursor": S.optional(S.NullOr(Cursor)),
-    "dx": S.optional(S.NullOr(S.Number)),
-    "dy": S.optional(S.NullOr(S.Number)),
-    "fill": S.optional(S.NullOr(S.String)),
-    "filled": S.optional(S.NullOr(S.Boolean)),
-    "fillOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "font": S.optional(S.NullOr(S.String)),
-    "fontSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "fontStyle": S.optional(S.NullOr(FontStyle)),
-    "fontWeight": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(100)).pipe(S.lessThanOrEqualTo(900)), FontWeight, S.Null)),
-    "href": S.optional(S.NullOr(S.String)),
-    "interpolate": S.optional(S.NullOr(Interpolate)),
-    "limit": S.optional(S.NullOr(S.Number)),
-    "opacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "orient": S.optional(S.NullOr(Orient)),
-    "radius": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "shape": S.optional(S.NullOr(S.String)),
-    "size": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "stroke": S.optional(S.NullOr(S.String)),
-    "strokeDash": S.optional(S.NullOr(S.Array(S.Number))),
-    "strokeDashOffset": S.optional(S.NullOr(S.Number)),
-    "strokeOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "strokeWidth": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "style": S.optional(S.Union(S.Array(S.String), S.String, S.Null)),
-    "tension": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "text": S.optional(S.NullOr(S.String)),
-    "theta": S.optional(S.NullOr(S.Number)),
+    "align": S.optional(HorizontalAlign),
+    "angle": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(360))),
+    "baseline": S.optional(VerticalAlign),
+    "clip": S.optional(S.Boolean),
+    "color": S.optional(S.String),
+    "cursor": S.optional(Cursor),
+    "dx": S.optional(S.Number),
+    "dy": S.optional(S.Number),
+    "fill": S.optional(S.String),
+    "filled": S.optional(S.Boolean),
+    "fillOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "font": S.optional(S.String),
+    "fontSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "fontStyle": S.optional(FontStyle),
+    "fontWeight": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(100)).pipe(S.lessThanOrEqualTo(900)), FontWeight)),
+    "href": S.optional(S.String),
+    "interpolate": S.optional(Interpolate),
+    "limit": S.optional(S.Number),
+    "opacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "orient": S.optional(Orient),
+    "radius": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "shape": S.optional(S.String),
+    "size": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "stroke": S.optional(S.String),
+    "strokeDash": S.optional(S.Array(S.Number)),
+    "strokeDashOffset": S.optional(S.Number),
+    "strokeOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "strokeWidth": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "style": S.optional(S.Union(S.Array(S.String), S.String)),
+    "tension": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "text": S.optional(S.String),
+    "theta": S.optional(S.Number),
     "type": Mark,
 }) {}
 
-export class LayerSpec extends S.Class<LayerSpec>("LayerSpec")({
-    "data": S.optional(S.NullOr(S.suspend(() => Data))),
-    "description": S.optional(S.NullOr(S.String)),
-    "height": S.optional(S.NullOr(S.Number)),
-    "layer": S.optional(S.NullOr(S.Array(S.suspend(() => LayerSpec)))),
-    "name": S.optional(S.NullOr(S.String)),
-    "resolve": S.optional(S.NullOr(Resolve)),
-    "title": S.optional(S.Union(S.String, TitleParams, S.Null)),
-    "transform": S.optional(S.NullOr(S.Array(Transform))),
-    "width": S.optional(S.NullOr(S.Number)),
-    "encoding": S.optional(S.NullOr(S.suspend(() => Encoding))),
-    "mark": S.optional(S.Union(Mark, MarkDef, S.Null)),
-    "projection": S.optional(S.NullOr(Projection)),
-    "selection": S.optional(S.NullOr(S.Record({ key: S.String, value: SelectionDef}))),
-}) {}
-
-export class Encoding extends S.Class<Encoding>("Encoding")({
-    "color": S.optional(S.NullOr(S.suspend(() => MarkPropDefWithCondition))),
-    "detail": S.optional(S.Union(S.Array(S.suspend(() => FieldDef)), S.suspend(() => FieldDef), S.Null)),
-    "href": S.optional(S.NullOr(S.suspend(() => DefWithCondition))),
-    "opacity": S.optional(S.NullOr(S.suspend(() => MarkPropDefWithCondition))),
-    "order": S.optional(S.Union(S.Array(S.suspend(() => OrderFieldDef)), S.suspend(() => OrderFieldDef), S.Null)),
-    "shape": S.optional(S.NullOr(S.suspend(() => MarkPropDefWithCondition))),
-    "size": S.optional(S.NullOr(S.suspend(() => MarkPropDefWithCondition))),
-    "text": S.optional(S.NullOr(S.suspend(() => TextDefWithCondition))),
-    "tooltip": S.optional(S.NullOr(S.suspend(() => TextDefWithCondition))),
-    "x": S.optional(S.NullOr(S.suspend(() => XClass))),
-    "x2": S.optional(S.NullOr(S.suspend(() => X2Class))),
-    "y": S.optional(S.NullOr(S.suspend(() => XClass))),
-    "y2": S.optional(S.NullOr(S.suspend(() => X2Class))),
-}) {}
-
-export class Spec extends S.Class<Spec>("Spec")({
-    "data": S.optional(S.NullOr(S.suspend(() => Data))),
-    "description": S.optional(S.NullOr(S.String)),
-    "height": S.optional(S.NullOr(S.Number)),
-    "layer": S.optional(S.NullOr(S.Array(LayerSpec))),
-    "name": S.optional(S.NullOr(S.String)),
-    "resolve": S.optional(S.NullOr(Resolve)),
-    "title": S.optional(S.Union(S.String, TitleParams, S.Null)),
-    "transform": S.optional(S.NullOr(S.Array(Transform))),
-    "width": S.optional(S.NullOr(S.Number)),
-    "encoding": S.optional(S.NullOr(Encoding)),
-    "mark": S.optional(S.Union(Mark, MarkDef, S.Null)),
-    "projection": S.optional(S.NullOr(Projection)),
-    "selection": S.optional(S.NullOr(S.Record({ key: S.String, value: SelectionDef}))),
-    "facet": S.optional(S.NullOr(S.suspend(() => FacetMapping))),
-    "spec": S.optional(S.NullOr(S.suspend(() => Spec))),
-    "repeat": S.optional(S.NullOr(Repeat)),
-    "vconcat": S.optional(S.NullOr(S.Array(S.suspend(() => Spec)))),
-    "hconcat": S.optional(S.NullOr(S.Array(S.suspend(() => Spec)))),
-}) {}
-
-export class FacetMapping extends S.Class<FacetMapping>("FacetMapping")({
-    "column": S.optional(S.NullOr(S.suspend(() => FacetFieldDef))),
-    "row": S.optional(S.NullOr(S.suspend(() => FacetFieldDef))),
-}) {}
-
 export class X2Class extends S.Class<X2Class>("X2Class")({
-    "aggregate": S.optional(S.NullOr(AggregateOp)),
-    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams), S.Null)),
-    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef), S.Null)),
-    "timeUnit": S.optional(S.NullOr(TimeUnit)),
-    "type": S.optional(S.NullOr(Type)),
-    "value": S.optional(S.Union(S.Boolean, S.Number, S.String, S.Null)),
+    "aggregate": S.optional(AggregateOp),
+    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams))),
+    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef))),
+    "timeUnit": S.optional(TimeUnit),
+    "type": S.optional(Type),
+    "value": S.optional(S.Union(S.Boolean, S.Number, S.String)),
 }) {}
 
 export class Axis extends S.Class<Axis>("Axis")({
-    "domain": S.optional(S.NullOr(S.Boolean)),
-    "format": S.optional(S.NullOr(S.String)),
-    "grid": S.optional(S.NullOr(S.Boolean)),
-    "labelAngle": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(-360)).pipe(S.lessThanOrEqualTo(360)))),
-    "labelBound": S.optional(S.Union(S.Boolean, S.Number, S.Null)),
-    "labelFlush": S.optional(S.Union(S.Boolean, S.Number, S.Null)),
-    "labelOverlap": S.optional(S.Union(S.Boolean, LabelOverlapEnum, S.Null)),
-    "labelPadding": S.optional(S.NullOr(S.Number)),
-    "labels": S.optional(S.NullOr(S.Boolean)),
-    "maxExtent": S.optional(S.NullOr(S.Number)),
-    "minExtent": S.optional(S.NullOr(S.Number)),
-    "offset": S.optional(S.NullOr(S.Number)),
-    "orient": S.optional(S.NullOr(TitleOrient)),
-    "position": S.optional(S.NullOr(S.Number)),
-    "tickCount": S.optional(S.NullOr(S.Number)),
-    "ticks": S.optional(S.NullOr(S.Boolean)),
-    "tickSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
+    "domain": S.optional(S.Boolean),
+    "format": S.optional(S.String),
+    "grid": S.optional(S.Boolean),
+    "labelAngle": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(-360)).pipe(S.lessThanOrEqualTo(360))),
+    "labelBound": S.optional(S.Union(S.Boolean, S.Number)),
+    "labelFlush": S.optional(S.Union(S.Boolean, S.Number)),
+    "labelOverlap": S.optional(S.Union(S.Boolean, LabelOverlapEnum)),
+    "labelPadding": S.optional(S.Number),
+    "labels": S.optional(S.Boolean),
+    "maxExtent": S.optional(S.Number),
+    "minExtent": S.optional(S.Number),
+    "offset": S.optional(S.Number),
+    "orient": S.optional(TitleOrient),
+    "position": S.optional(S.Number),
+    "tickCount": S.optional(S.Number),
+    "ticks": S.optional(S.Boolean),
+    "tickSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
     "title": S.optional(S.NullOr(S.String)),
-    "titleMaxLength": S.optional(S.NullOr(S.Number)),
-    "titlePadding": S.optional(S.NullOr(S.Number)),
-    "values": S.optional(S.NullOr(S.Array(S.Union(S.Number, S.suspend(() => DateTime))))),
-    "zindex": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-}) {}
-
-export class XClass extends S.Class<XClass>("XClass")({
-    "aggregate": S.optional(S.NullOr(AggregateOp)),
-    "axis": S.optional(S.NullOr(Axis)),
-    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams), S.Null)),
-    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef), S.Null)),
-    "scale": S.optional(S.NullOr(S.suspend(() => Scale))),
-    "sort": S.optional(S.Union(SortEnum, S.suspend(() => SortField), S.Null)),
-    "stack": S.optional(S.NullOr(StackOffset)),
-    "timeUnit": S.optional(S.NullOr(TimeUnit)),
-    "type": S.optional(S.NullOr(Type)),
-    "value": S.optional(S.Union(S.Boolean, S.Number, S.String, S.Null)),
+    "titleMaxLength": S.optional(S.Number),
+    "titlePadding": S.optional(S.Number),
+    "values": S.optional(S.Array(S.Union(S.Number, S.suspend(() => DateTime)))),
+    "zindex": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
 }) {}
 
 export class ConditionalPredicateTextFieldDefClass extends S.Class<ConditionalPredicateTextFieldDefClass>("ConditionalPredicateTextFieldDefClass")({
-    "test": S.optional(S.Union(S.String, S.suspend(() => Predicate), S.Null)),
-    "value": S.optional(S.Union(S.Boolean, S.Number, S.String, S.Null)),
-    "selection": S.optional(S.Union(S.String, S.suspend(() => Selection), S.Null)),
-    "aggregate": S.optional(S.NullOr(AggregateOp)),
-    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams), S.Null)),
-    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef), S.Null)),
-    "format": S.optional(S.NullOr(S.String)),
-    "timeUnit": S.optional(S.NullOr(TimeUnit)),
-    "type": S.optional(S.NullOr(Type)),
+    "test": S.optional(S.Union(S.String, S.suspend(() => Predicate))),
+    "value": S.optional(S.Union(S.Boolean, S.Number, S.String)),
+    "selection": S.optional(S.Union(S.String, S.suspend(() => Selection))),
+    "aggregate": S.optional(AggregateOp),
+    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams))),
+    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef))),
+    "format": S.optional(S.String),
+    "timeUnit": S.optional(TimeUnit),
+    "type": S.optional(Type),
 }) {}
 
 export class TextDefWithCondition extends S.Class<TextDefWithCondition>("TextDefWithCondition")({
-    "aggregate": S.optional(S.NullOr(AggregateOp)),
-    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams), S.Null)),
-    "condition": S.optional(S.Union(S.Array(S.suspend(() => ConditionalValueDef)), ConditionalPredicateTextFieldDefClass, S.Null)),
-    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef), S.Null)),
-    "format": S.optional(S.NullOr(S.String)),
-    "timeUnit": S.optional(S.NullOr(TimeUnit)),
-    "type": S.optional(S.NullOr(Type)),
-    "value": S.optional(S.Union(S.Boolean, S.Number, S.String, S.Null)),
+    "aggregate": S.optional(AggregateOp),
+    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams))),
+    "condition": S.optional(S.Union(S.Array(S.suspend(() => ConditionalValueDef)), ConditionalPredicateTextFieldDefClass)),
+    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef))),
+    "format": S.optional(S.String),
+    "timeUnit": S.optional(TimeUnit),
+    "type": S.optional(Type),
+    "value": S.optional(S.Union(S.Boolean, S.Number, S.String)),
 }) {}
 
 export class OrderFieldDef extends S.Class<OrderFieldDef>("OrderFieldDef")({
-    "aggregate": S.optional(S.NullOr(AggregateOp)),
-    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams), S.Null)),
-    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef), S.Null)),
+    "aggregate": S.optional(AggregateOp),
+    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams))),
+    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef))),
     "sort": S.optional(S.NullOr(SortEnum)),
-    "timeUnit": S.optional(S.NullOr(TimeUnit)),
+    "timeUnit": S.optional(TimeUnit),
     "type": Type,
 }) {}
 
 export class ConditionalPredicateFieldDefClass extends S.Class<ConditionalPredicateFieldDefClass>("ConditionalPredicateFieldDefClass")({
-    "test": S.optional(S.Union(S.String, S.suspend(() => Predicate), S.Null)),
-    "value": S.optional(S.Union(S.Boolean, S.Number, S.String, S.Null)),
-    "selection": S.optional(S.Union(S.String, S.suspend(() => Selection), S.Null)),
-    "aggregate": S.optional(S.NullOr(AggregateOp)),
-    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams), S.Null)),
-    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef), S.Null)),
-    "timeUnit": S.optional(S.NullOr(TimeUnit)),
-    "type": S.optional(S.NullOr(Type)),
+    "test": S.optional(S.Union(S.String, S.suspend(() => Predicate))),
+    "value": S.optional(S.Union(S.Boolean, S.Number, S.String)),
+    "selection": S.optional(S.Union(S.String, S.suspend(() => Selection))),
+    "aggregate": S.optional(AggregateOp),
+    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams))),
+    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef))),
+    "timeUnit": S.optional(TimeUnit),
+    "type": S.optional(Type),
 }) {}
 
 export class DefWithCondition extends S.Class<DefWithCondition>("DefWithCondition")({
-    "aggregate": S.optional(S.NullOr(AggregateOp)),
-    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams), S.Null)),
-    "condition": S.optional(S.Union(S.Array(S.suspend(() => ConditionalValueDef)), ConditionalPredicateFieldDefClass, S.Null)),
-    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef), S.Null)),
-    "timeUnit": S.optional(S.NullOr(TimeUnit)),
-    "type": S.optional(S.NullOr(Type)),
-    "value": S.optional(S.Union(S.Boolean, S.Number, S.String, S.Null)),
+    "aggregate": S.optional(AggregateOp),
+    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams))),
+    "condition": S.optional(S.Union(S.Array(S.suspend(() => ConditionalValueDef)), ConditionalPredicateFieldDefClass)),
+    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef))),
+    "timeUnit": S.optional(TimeUnit),
+    "type": S.optional(Type),
+    "value": S.optional(S.Union(S.Boolean, S.Number, S.String)),
 }) {}
 
 export class FieldDef extends S.Class<FieldDef>("FieldDef")({
-    "aggregate": S.optional(S.NullOr(AggregateOp)),
-    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams), S.Null)),
-    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef), S.Null)),
-    "timeUnit": S.optional(S.NullOr(TimeUnit)),
+    "aggregate": S.optional(AggregateOp),
+    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams))),
+    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef))),
+    "timeUnit": S.optional(TimeUnit),
     "type": Type,
 }) {}
 
 export class Header extends S.Class<Header>("Header")({
-    "format": S.optional(S.NullOr(S.String)),
-    "labelAngle": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(-360)).pipe(S.lessThanOrEqualTo(360)))),
+    "format": S.optional(S.String),
+    "labelAngle": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(-360)).pipe(S.lessThanOrEqualTo(360))),
     "title": S.optional(S.NullOr(S.String)),
 }) {}
 
-export class LookupData extends S.Class<LookupData>("LookupData")({
-    "data": S.suspend(() => Data),
-    "fields": S.optional(S.NullOr(S.Array(S.String))),
-    "key": S.String,
+export class SelectionDef extends S.Class<SelectionDef>("SelectionDef")({
+    "bind": S.optional(S.Union(BindEnum, S.Record({ key: S.String, value: S.suspend(() => VgBinding)}))),
+    "empty": S.optional(Empty),
+    "encodings": S.optional(S.Array(SingleDefChannel)),
+    "fields": S.optional(S.Array(S.String)),
+    "nearest": S.optional(S.Boolean),
+    "on": S.optional(S.Any),
+    "resolve": S.optional(SelectionResolution),
+    "type": SelectionDefType,
+    "toggle": S.optional(S.Union(S.Boolean, S.String)),
+    "mark": S.optional(S.suspend(() => BrushConfig)),
+    "translate": S.optional(S.Union(S.Boolean, S.String)),
+    "zoom": S.optional(S.Union(S.Boolean, S.String)),
 }) {}
 
 export class FacetFieldDef extends S.Class<FacetFieldDef>("FacetFieldDef")({
-    "aggregate": S.optional(S.NullOr(AggregateOp)),
-    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams), S.Null)),
-    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef), S.Null)),
-    "header": S.optional(S.NullOr(Header)),
+    "aggregate": S.optional(AggregateOp),
+    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams))),
+    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef))),
+    "header": S.optional(Header),
     "sort": S.optional(S.NullOr(SortEnum)),
-    "timeUnit": S.optional(S.NullOr(TimeUnit)),
+    "timeUnit": S.optional(TimeUnit),
     "type": Type,
 }) {}
 
 export class SortField extends S.Class<SortField>("SortField")({
-    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef), S.Null)),
+    "field": S.optional(S.Union(S.String, S.suspend(() => RepeatRef))),
     "op": AggregateOp,
     "order": S.optional(S.NullOr(SortEnum)),
 }) {}
 
 export class SchemeParams extends S.Class<SchemeParams>("SchemeParams")({
-    "extent": S.optional(S.NullOr(S.Array(S.Number))),
+    "extent": S.optional(S.Array(S.Number)),
     "name": S.String,
 }) {}
 
@@ -921,45 +830,65 @@ export class NiceClass extends S.Class<NiceClass>("NiceClass")({
 }) {}
 
 export class InterpolateParams extends S.Class<InterpolateParams>("InterpolateParams")({
-    "gamma": S.optional(S.NullOr(S.Number)),
+    "gamma": S.optional(S.Number),
     "type": InterpolateParamsType,
 }) {}
 
 export class DomainClass extends S.Class<DomainClass>("DomainClass")({
-    "field": S.optional(S.NullOr(S.String)),
+    "field": S.optional(S.String),
     "selection": S.String,
-    "encoding": S.optional(S.NullOr(S.String)),
+    "encoding": S.optional(S.String),
 }) {}
 
 export class Scale extends S.Class<Scale>("Scale")({
-    "base": S.optional(S.NullOr(S.Number)),
-    "clamp": S.optional(S.NullOr(S.Boolean)),
-    "domain": S.optional(S.Union(S.Array(S.Union(S.Boolean, S.Number, S.String, S.suspend(() => DateTime))), Domain, DomainClass, S.Null)),
-    "exponent": S.optional(S.NullOr(S.Number)),
-    "interpolate": S.optional(S.Union(Interpolate, InterpolateParams, S.Null)),
-    "nice": S.optional(S.Union(S.Boolean, S.Number, NiceTime, NiceClass, S.Null)),
-    "padding": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "paddingInner": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "paddingOuter": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "range": S.optional(S.Union(S.Array(S.Union(S.Number, S.String)), S.String, S.Null)),
+    "base": S.optional(S.Number),
+    "clamp": S.optional(S.Boolean),
+    "domain": S.optional(S.Union(S.Array(S.Union(S.Boolean, S.Number, S.String, S.suspend(() => DateTime))), Domain, DomainClass)),
+    "exponent": S.optional(S.Number),
+    "interpolate": S.optional(S.Union(Interpolate, InterpolateParams)),
+    "nice": S.optional(S.Union(S.Boolean, S.Number, NiceTime, NiceClass)),
+    "padding": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "paddingInner": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "paddingOuter": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "range": S.optional(S.Union(S.Array(S.Union(S.Number, S.String)), S.String)),
     "rangeStep": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "round": S.optional(S.NullOr(S.Boolean)),
-    "scheme": S.optional(S.Union(S.String, SchemeParams, S.Null)),
-    "type": S.optional(S.NullOr(ScaleType)),
-    "zero": S.optional(S.NullOr(S.Boolean)),
+    "round": S.optional(S.Boolean),
+    "scheme": S.optional(S.Union(S.String, SchemeParams)),
+    "type": S.optional(ScaleType),
+    "zero": S.optional(S.Boolean),
+}) {}
+
+export class LookupData extends S.Class<LookupData>("LookupData")({
+    "data": S.suspend(() => Data),
+    "fields": S.optional(S.Array(S.String)),
+    "key": S.String,
 }) {}
 
 export class Legend extends S.Class<Legend>("Legend")({
-    "entryPadding": S.optional(S.NullOr(S.Number)),
-    "format": S.optional(S.NullOr(S.String)),
-    "offset": S.optional(S.NullOr(S.Number)),
-    "orient": S.optional(S.NullOr(LegendOrient)),
-    "padding": S.optional(S.NullOr(S.Number)),
-    "tickCount": S.optional(S.NullOr(S.Number)),
+    "entryPadding": S.optional(S.Number),
+    "format": S.optional(S.String),
+    "offset": S.optional(S.Number),
+    "orient": S.optional(LegendOrient),
+    "padding": S.optional(S.Number),
+    "tickCount": S.optional(S.Number),
     "title": S.optional(S.NullOr(S.String)),
-    "type": S.optional(S.NullOr(LegendType)),
-    "values": S.optional(S.NullOr(S.Array(S.Union(S.Number, S.String, S.suspend(() => DateTime))))),
-    "zindex": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
+    "type": S.optional(LegendType),
+    "values": S.optional(S.Array(S.Union(S.Number, S.String, S.suspend(() => DateTime)))),
+    "zindex": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+}) {}
+
+export class Transform extends S.Class<Transform>("Transform")({
+    "filter": S.optional(S.Union(S.String, S.suspend(() => Predicate))),
+    "as": S.optional(S.Union(S.Array(S.String), S.String)),
+    "calculate": S.optional(S.String),
+    "default": S.optional(S.String),
+    "from": S.optional(LookupData),
+    "lookup": S.optional(S.String),
+    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams))),
+    "field": S.optional(S.String),
+    "timeUnit": S.optional(TimeUnit),
+    "aggregate": S.optional(S.Array(AggregatedFieldDef)),
+    "groupby": S.optional(S.Array(S.String)),
 }) {}
 
 export class RepeatRef extends S.Class<RepeatRef>("RepeatRef")({
@@ -967,609 +896,680 @@ export class RepeatRef extends S.Class<RepeatRef>("RepeatRef")({
 }) {}
 
 export class ConditionalPredicateMarkPropFieldDefClass extends S.Class<ConditionalPredicateMarkPropFieldDefClass>("ConditionalPredicateMarkPropFieldDefClass")({
-    "test": S.optional(S.Union(S.String, S.suspend(() => Predicate), S.Null)),
-    "value": S.optional(S.Union(S.Boolean, S.Number, S.String, S.Null)),
-    "selection": S.optional(S.Union(S.String, S.suspend(() => Selection), S.Null)),
-    "aggregate": S.optional(S.NullOr(AggregateOp)),
-    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams), S.Null)),
-    "field": S.optional(S.Union(S.String, RepeatRef, S.Null)),
+    "test": S.optional(S.Union(S.String, S.suspend(() => Predicate))),
+    "value": S.optional(S.Union(S.Boolean, S.Number, S.String)),
+    "selection": S.optional(S.Union(S.String, S.suspend(() => Selection))),
+    "aggregate": S.optional(AggregateOp),
+    "bin": S.optional(S.Union(S.Boolean, S.suspend(() => BinParams))),
+    "field": S.optional(S.Union(S.String, RepeatRef)),
     "legend": S.optional(S.NullOr(Legend)),
-    "scale": S.optional(S.NullOr(Scale)),
+    "scale": S.optional(Scale),
     "sort": S.optional(S.Union(SortEnum, SortField, S.Null)),
-    "timeUnit": S.optional(S.NullOr(TimeUnit)),
-    "type": S.optional(S.NullOr(Type)),
+    "timeUnit": S.optional(TimeUnit),
+    "type": S.optional(Type),
 }) {}
 
 export class DateTime extends S.Class<DateTime>("DateTime")({
-    "date": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(1)).pipe(S.lessThanOrEqualTo(31)))),
-    "day": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(1)).pipe(S.lessThanOrEqualTo(7)), S.String, S.Null)),
-    "hours": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(23)))),
-    "milliseconds": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(999)))),
-    "minutes": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(59)))),
-    "month": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(1)).pipe(S.lessThanOrEqualTo(12)), S.String, S.Null)),
-    "quarter": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(1)).pipe(S.lessThanOrEqualTo(4)))),
-    "seconds": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(59)))),
-    "utc": S.optional(S.NullOr(S.Boolean)),
-    "year": S.optional(S.NullOr(S.Number)),
+    "date": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(1)).pipe(S.lessThanOrEqualTo(31))),
+    "day": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(1)).pipe(S.lessThanOrEqualTo(7)), S.String)),
+    "hours": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(23))),
+    "milliseconds": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(999))),
+    "minutes": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(59))),
+    "month": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(1)).pipe(S.lessThanOrEqualTo(12)), S.String)),
+    "quarter": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(1)).pipe(S.lessThanOrEqualTo(4))),
+    "seconds": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(59))),
+    "utc": S.optional(S.Boolean),
+    "year": S.optional(S.Number),
 }) {}
 
 export class Predicate extends S.Class<Predicate>("Predicate")({
-    "not": S.optional(S.Union(S.String, S.suspend(() => Predicate), S.Null)),
-    "and": S.optional(S.NullOr(S.Array(S.Union(S.String, S.suspend(() => Predicate))))),
-    "or": S.optional(S.NullOr(S.Array(S.Union(S.String, S.suspend(() => Predicate))))),
-    "equal": S.optional(S.Union(S.Boolean, S.Number, S.String, DateTime, S.Null)),
-    "field": S.optional(S.NullOr(S.String)),
-    "timeUnit": S.optional(S.NullOr(TimeUnit)),
-    "range": S.optional(S.NullOr(S.Array(S.Union(S.Number, DateTime, S.Null)).pipe(S.minItems(2)).pipe(S.maxItems(2)))),
-    "oneOf": S.optional(S.NullOr(S.Array(S.Union(S.Boolean, S.Number, S.String, DateTime)))),
-    "selection": S.optional(S.Union(S.String, S.suspend(() => Selection), S.Null)),
+    "not": S.optional(S.Union(S.String, S.suspend(() => Predicate))),
+    "and": S.optional(S.Array(S.Union(S.String, S.suspend(() => Predicate)))),
+    "or": S.optional(S.Array(S.Union(S.String, S.suspend(() => Predicate)))),
+    "equal": S.optional(S.Union(S.Boolean, S.Number, S.String, DateTime)),
+    "field": S.optional(S.String),
+    "timeUnit": S.optional(TimeUnit),
+    "range": S.optional(S.Array(S.Union(S.Number, DateTime, S.Null)).pipe(S.minItems(2)).pipe(S.maxItems(2))),
+    "oneOf": S.optional(S.Array(S.Union(S.Boolean, S.Number, S.String, DateTime))),
+    "selection": S.optional(S.Union(S.String, S.suspend(() => Selection))),
 }) {}
 
 export class Selection extends S.Class<Selection>("Selection")({
-    "not": S.optional(S.Union(S.String, S.suspend(() => Selection), S.Null)),
-    "and": S.optional(S.NullOr(S.Array(S.Union(S.String, S.suspend(() => Selection))))),
-    "or": S.optional(S.NullOr(S.Array(S.Union(S.String, S.suspend(() => Selection))))),
+    "not": S.optional(S.Union(S.String, S.suspend(() => Selection))),
+    "and": S.optional(S.Array(S.Union(S.String, S.suspend(() => Selection)))),
+    "or": S.optional(S.Array(S.Union(S.String, S.suspend(() => Selection)))),
 }) {}
 
 export class ConditionalValueDef extends S.Class<ConditionalValueDef>("ConditionalValueDef")({
-    "test": S.optional(S.Union(S.String, Predicate, S.Null)),
+    "test": S.optional(S.Union(S.String, Predicate)),
     "value": S.Union(S.Boolean, S.Number, S.String),
-    "selection": S.optional(S.Union(S.String, Selection, S.Null)),
+    "selection": S.optional(S.Union(S.String, Selection)),
 }) {}
 
 export class BinParams extends S.Class<BinParams>("BinParams")({
-    "base": S.optional(S.NullOr(S.Number)),
-    "divide": S.optional(S.NullOr(S.Array(S.Number).pipe(S.minItems(1)))),
-    "extent": S.optional(S.NullOr(S.Array(S.Number).pipe(S.minItems(2)).pipe(S.maxItems(2)))),
-    "maxbins": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(2)))),
-    "minstep": S.optional(S.NullOr(S.Number)),
-    "nice": S.optional(S.NullOr(S.Boolean)),
-    "step": S.optional(S.NullOr(S.Number)),
-    "steps": S.optional(S.NullOr(S.Array(S.Number).pipe(S.minItems(1)))),
+    "base": S.optional(S.Number),
+    "divide": S.optional(S.Array(S.Number).pipe(S.minItems(1))),
+    "extent": S.optional(S.Array(S.Number).pipe(S.minItems(2)).pipe(S.maxItems(2))),
+    "maxbins": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(2))),
+    "minstep": S.optional(S.Number),
+    "nice": S.optional(S.Boolean),
+    "step": S.optional(S.Number),
+    "steps": S.optional(S.Array(S.Number).pipe(S.minItems(1))),
 }) {}
 
 export class MarkPropDefWithCondition extends S.Class<MarkPropDefWithCondition>("MarkPropDefWithCondition")({
-    "aggregate": S.optional(S.NullOr(AggregateOp)),
-    "bin": S.optional(S.Union(S.Boolean, BinParams, S.Null)),
-    "condition": S.optional(S.Union(S.Array(ConditionalValueDef), ConditionalPredicateMarkPropFieldDefClass, S.Null)),
-    "field": S.optional(S.Union(S.String, RepeatRef, S.Null)),
+    "aggregate": S.optional(AggregateOp),
+    "bin": S.optional(S.Union(S.Boolean, BinParams)),
+    "condition": S.optional(S.Union(S.Array(ConditionalValueDef), ConditionalPredicateMarkPropFieldDefClass)),
+    "field": S.optional(S.Union(S.String, RepeatRef)),
     "legend": S.optional(S.NullOr(Legend)),
-    "scale": S.optional(S.NullOr(Scale)),
+    "scale": S.optional(Scale),
     "sort": S.optional(S.Union(SortEnum, SortField, S.Null)),
-    "timeUnit": S.optional(S.NullOr(TimeUnit)),
-    "type": S.optional(S.NullOr(Type)),
-    "value": S.optional(S.Union(S.Boolean, S.Number, S.String, S.Null)),
+    "timeUnit": S.optional(TimeUnit),
+    "type": S.optional(Type),
+    "value": S.optional(S.Union(S.Boolean, S.Number, S.String)),
 }) {}
 
 export class EncodingWithFacet extends S.Class<EncodingWithFacet>("EncodingWithFacet")({
-    "color": S.optional(S.NullOr(MarkPropDefWithCondition)),
-    "column": S.optional(S.NullOr(FacetFieldDef)),
-    "detail": S.optional(S.Union(S.Array(FieldDef), FieldDef, S.Null)),
-    "href": S.optional(S.NullOr(DefWithCondition)),
-    "opacity": S.optional(S.NullOr(MarkPropDefWithCondition)),
-    "order": S.optional(S.Union(S.Array(OrderFieldDef), OrderFieldDef, S.Null)),
-    "row": S.optional(S.NullOr(FacetFieldDef)),
-    "shape": S.optional(S.NullOr(MarkPropDefWithCondition)),
-    "size": S.optional(S.NullOr(MarkPropDefWithCondition)),
-    "text": S.optional(S.NullOr(TextDefWithCondition)),
-    "tooltip": S.optional(S.NullOr(TextDefWithCondition)),
-    "x": S.optional(S.NullOr(XClass)),
-    "x2": S.optional(S.NullOr(X2Class)),
-    "y": S.optional(S.NullOr(XClass)),
-    "y2": S.optional(S.NullOr(X2Class)),
+    "color": S.optional(MarkPropDefWithCondition),
+    "column": S.optional(FacetFieldDef),
+    "detail": S.optional(S.Union(S.Array(FieldDef), FieldDef)),
+    "href": S.optional(DefWithCondition),
+    "opacity": S.optional(MarkPropDefWithCondition),
+    "order": S.optional(S.Union(S.Array(OrderFieldDef), OrderFieldDef)),
+    "row": S.optional(FacetFieldDef),
+    "shape": S.optional(MarkPropDefWithCondition),
+    "size": S.optional(MarkPropDefWithCondition),
+    "text": S.optional(TextDefWithCondition),
+    "tooltip": S.optional(TextDefWithCondition),
+    "x": S.optional(S.suspend(() => XClass)),
+    "x2": S.optional(X2Class),
+    "y": S.optional(S.suspend(() => XClass)),
+    "y2": S.optional(X2Class),
 }) {}
 
 export class DataFormat extends S.Class<DataFormat>("DataFormat")({
-    "parse": S.optional(S.Union(ParseEnum, S.Record({ key: S.String, value: S.Any}), S.Null)),
-    "type": S.optional(S.NullOr(DataFormatType)),
-    "property": S.optional(S.NullOr(S.String)),
-    "feature": S.optional(S.NullOr(S.String)),
-    "mesh": S.optional(S.NullOr(S.String)),
+    "parse": S.optional(S.Union(ParseEnum, S.Record({ key: S.String, value: S.Any}))),
+    "type": S.optional(DataFormatType),
+    "property": S.optional(S.String),
+    "feature": S.optional(S.String),
+    "mesh": S.optional(S.String),
 }) {}
 
 export class Data extends S.Class<Data>("Data")({
-    "format": S.optional(S.NullOr(DataFormat)),
-    "url": S.optional(S.NullOr(S.String)),
-    "values": S.optional(S.Union(S.Array(S.Union(S.Boolean, S.Number, S.Record({ key: S.String, value: S.Any}), S.String)), S.Record({ key: S.String, value: S.Any}), S.String, S.Null)),
-    "name": S.optional(S.NullOr(S.String)),
+    "format": S.optional(DataFormat),
+    "url": S.optional(S.String),
+    "values": S.optional(S.Union(S.Array(S.Union(S.Boolean, S.Number, S.Record({ key: S.String, value: S.Any}), S.String)), S.Record({ key: S.String, value: S.Any}), S.String)),
+    "name": S.optional(S.String),
 }) {}
 
 export class ViewConfig extends S.Class<ViewConfig>("ViewConfig")({
-    "clip": S.optional(S.NullOr(S.Boolean)),
-    "fill": S.optional(S.NullOr(S.String)),
-    "fillOpacity": S.optional(S.NullOr(S.Number)),
-    "height": S.optional(S.NullOr(S.Number)),
-    "stroke": S.optional(S.NullOr(S.String)),
-    "strokeDash": S.optional(S.NullOr(S.Array(S.Number))),
-    "strokeDashOffset": S.optional(S.NullOr(S.Number)),
-    "strokeOpacity": S.optional(S.NullOr(S.Number)),
-    "strokeWidth": S.optional(S.NullOr(S.Number)),
-    "width": S.optional(S.NullOr(S.Number)),
+    "clip": S.optional(S.Boolean),
+    "fill": S.optional(S.String),
+    "fillOpacity": S.optional(S.Number),
+    "height": S.optional(S.Number),
+    "stroke": S.optional(S.String),
+    "strokeDash": S.optional(S.Array(S.Number)),
+    "strokeDashOffset": S.optional(S.Number),
+    "strokeOpacity": S.optional(S.Number),
+    "strokeWidth": S.optional(S.Number),
+    "width": S.optional(S.Number),
 }) {}
 
 export class VgTitleConfig extends S.Class<VgTitleConfig>("VgTitleConfig")({
-    "anchor": S.optional(S.NullOr(Anchor)),
-    "angle": S.optional(S.NullOr(S.Number)),
-    "baseline": S.optional(S.NullOr(VerticalAlign)),
-    "color": S.optional(S.NullOr(S.String)),
-    "font": S.optional(S.NullOr(S.String)),
-    "fontSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "fontWeight": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(100)).pipe(S.lessThanOrEqualTo(900)), FontWeight, S.Null)),
-    "limit": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "offset": S.optional(S.NullOr(S.Number)),
-    "orient": S.optional(S.NullOr(TitleOrient)),
+    "anchor": S.optional(Anchor),
+    "angle": S.optional(S.Number),
+    "baseline": S.optional(VerticalAlign),
+    "color": S.optional(S.String),
+    "font": S.optional(S.String),
+    "fontSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "fontWeight": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(100)).pipe(S.lessThanOrEqualTo(900)), FontWeight)),
+    "limit": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "offset": S.optional(S.Number),
+    "orient": S.optional(TitleOrient),
 }) {}
 
 export class TickConfig extends S.Class<TickConfig>("TickConfig")({
-    "align": S.optional(S.NullOr(HorizontalAlign)),
-    "angle": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(360)))),
-    "bandSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "baseline": S.optional(S.NullOr(VerticalAlign)),
-    "color": S.optional(S.NullOr(S.String)),
-    "cursor": S.optional(S.NullOr(Cursor)),
-    "dx": S.optional(S.NullOr(S.Number)),
-    "dy": S.optional(S.NullOr(S.Number)),
-    "fill": S.optional(S.NullOr(S.String)),
-    "filled": S.optional(S.NullOr(S.Boolean)),
-    "fillOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "font": S.optional(S.NullOr(S.String)),
-    "fontSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "fontStyle": S.optional(S.NullOr(FontStyle)),
-    "fontWeight": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(100)).pipe(S.lessThanOrEqualTo(900)), FontWeight, S.Null)),
-    "href": S.optional(S.NullOr(S.String)),
-    "interpolate": S.optional(S.NullOr(Interpolate)),
-    "limit": S.optional(S.NullOr(S.Number)),
-    "opacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "orient": S.optional(S.NullOr(Orient)),
-    "radius": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "shape": S.optional(S.NullOr(S.String)),
-    "size": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "stroke": S.optional(S.NullOr(S.String)),
-    "strokeDash": S.optional(S.NullOr(S.Array(S.Number))),
-    "strokeDashOffset": S.optional(S.NullOr(S.Number)),
-    "strokeOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "strokeWidth": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "tension": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "text": S.optional(S.NullOr(S.String)),
-    "theta": S.optional(S.NullOr(S.Number)),
-    "thickness": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
+    "align": S.optional(HorizontalAlign),
+    "angle": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(360))),
+    "bandSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "baseline": S.optional(VerticalAlign),
+    "color": S.optional(S.String),
+    "cursor": S.optional(Cursor),
+    "dx": S.optional(S.Number),
+    "dy": S.optional(S.Number),
+    "fill": S.optional(S.String),
+    "filled": S.optional(S.Boolean),
+    "fillOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "font": S.optional(S.String),
+    "fontSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "fontStyle": S.optional(FontStyle),
+    "fontWeight": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(100)).pipe(S.lessThanOrEqualTo(900)), FontWeight)),
+    "href": S.optional(S.String),
+    "interpolate": S.optional(Interpolate),
+    "limit": S.optional(S.Number),
+    "opacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "orient": S.optional(Orient),
+    "radius": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "shape": S.optional(S.String),
+    "size": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "stroke": S.optional(S.String),
+    "strokeDash": S.optional(S.Array(S.Number)),
+    "strokeDashOffset": S.optional(S.Number),
+    "strokeOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "strokeWidth": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "tension": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "text": S.optional(S.String),
+    "theta": S.optional(S.Number),
+    "thickness": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
 }) {}
 
 export class TextConfig extends S.Class<TextConfig>("TextConfig")({
-    "align": S.optional(S.NullOr(HorizontalAlign)),
-    "angle": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(360)))),
-    "baseline": S.optional(S.NullOr(VerticalAlign)),
-    "color": S.optional(S.NullOr(S.String)),
-    "cursor": S.optional(S.NullOr(Cursor)),
-    "dx": S.optional(S.NullOr(S.Number)),
-    "dy": S.optional(S.NullOr(S.Number)),
-    "fill": S.optional(S.NullOr(S.String)),
-    "filled": S.optional(S.NullOr(S.Boolean)),
-    "fillOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "font": S.optional(S.NullOr(S.String)),
-    "fontSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "fontStyle": S.optional(S.NullOr(FontStyle)),
-    "fontWeight": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(100)).pipe(S.lessThanOrEqualTo(900)), FontWeight, S.Null)),
-    "href": S.optional(S.NullOr(S.String)),
-    "interpolate": S.optional(S.NullOr(Interpolate)),
-    "limit": S.optional(S.NullOr(S.Number)),
-    "opacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "orient": S.optional(S.NullOr(Orient)),
-    "radius": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "shape": S.optional(S.NullOr(S.String)),
-    "shortTimeLabels": S.optional(S.NullOr(S.Boolean)),
-    "size": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "stroke": S.optional(S.NullOr(S.String)),
-    "strokeDash": S.optional(S.NullOr(S.Array(S.Number))),
-    "strokeDashOffset": S.optional(S.NullOr(S.Number)),
-    "strokeOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "strokeWidth": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "tension": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "text": S.optional(S.NullOr(S.String)),
-    "theta": S.optional(S.NullOr(S.Number)),
+    "align": S.optional(HorizontalAlign),
+    "angle": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(360))),
+    "baseline": S.optional(VerticalAlign),
+    "color": S.optional(S.String),
+    "cursor": S.optional(Cursor),
+    "dx": S.optional(S.Number),
+    "dy": S.optional(S.Number),
+    "fill": S.optional(S.String),
+    "filled": S.optional(S.Boolean),
+    "fillOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "font": S.optional(S.String),
+    "fontSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "fontStyle": S.optional(FontStyle),
+    "fontWeight": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(100)).pipe(S.lessThanOrEqualTo(900)), FontWeight)),
+    "href": S.optional(S.String),
+    "interpolate": S.optional(Interpolate),
+    "limit": S.optional(S.Number),
+    "opacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "orient": S.optional(Orient),
+    "radius": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "shape": S.optional(S.String),
+    "shortTimeLabels": S.optional(S.Boolean),
+    "size": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "stroke": S.optional(S.String),
+    "strokeDash": S.optional(S.Array(S.Number)),
+    "strokeDashOffset": S.optional(S.Number),
+    "strokeOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "strokeWidth": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "tension": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "text": S.optional(S.String),
+    "theta": S.optional(S.Number),
 }) {}
 
 export class VgMarkConfig extends S.Class<VgMarkConfig>("VgMarkConfig")({
-    "align": S.optional(S.NullOr(HorizontalAlign)),
-    "angle": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(360)))),
-    "baseline": S.optional(S.NullOr(VerticalAlign)),
-    "cursor": S.optional(S.NullOr(Cursor)),
-    "dx": S.optional(S.NullOr(S.Number)),
-    "dy": S.optional(S.NullOr(S.Number)),
-    "fill": S.optional(S.NullOr(S.String)),
-    "fillOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "font": S.optional(S.NullOr(S.String)),
-    "fontSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "fontStyle": S.optional(S.NullOr(FontStyle)),
-    "fontWeight": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(100)).pipe(S.lessThanOrEqualTo(900)), FontWeight, S.Null)),
-    "href": S.optional(S.NullOr(S.String)),
-    "interpolate": S.optional(S.NullOr(Interpolate)),
-    "limit": S.optional(S.NullOr(S.Number)),
-    "opacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "orient": S.optional(S.NullOr(Orient)),
-    "radius": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "shape": S.optional(S.NullOr(S.String)),
-    "size": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "stroke": S.optional(S.NullOr(S.String)),
-    "strokeDash": S.optional(S.NullOr(S.Array(S.Number))),
-    "strokeDashOffset": S.optional(S.NullOr(S.Number)),
-    "strokeOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "strokeWidth": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "tension": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "text": S.optional(S.NullOr(S.String)),
-    "theta": S.optional(S.NullOr(S.Number)),
+    "align": S.optional(HorizontalAlign),
+    "angle": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(360))),
+    "baseline": S.optional(VerticalAlign),
+    "cursor": S.optional(Cursor),
+    "dx": S.optional(S.Number),
+    "dy": S.optional(S.Number),
+    "fill": S.optional(S.String),
+    "fillOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "font": S.optional(S.String),
+    "fontSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "fontStyle": S.optional(FontStyle),
+    "fontWeight": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(100)).pipe(S.lessThanOrEqualTo(900)), FontWeight)),
+    "href": S.optional(S.String),
+    "interpolate": S.optional(Interpolate),
+    "limit": S.optional(S.Number),
+    "opacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "orient": S.optional(Orient),
+    "radius": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "shape": S.optional(S.String),
+    "size": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "stroke": S.optional(S.String),
+    "strokeDash": S.optional(S.Array(S.Number)),
+    "strokeDashOffset": S.optional(S.Number),
+    "strokeOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "strokeWidth": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "tension": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "text": S.optional(S.String),
+    "theta": S.optional(S.Number),
 }) {}
 
 export class VgBinding extends S.Class<VgBinding>("VgBinding")({
-    "element": S.optional(S.NullOr(S.String)),
+    "element": S.optional(S.String),
     "input": S.String,
-    "options": S.optional(S.NullOr(S.Array(S.String))),
-    "max": S.optional(S.NullOr(S.Number)),
-    "min": S.optional(S.NullOr(S.Number)),
-    "step": S.optional(S.NullOr(S.Number)),
+    "options": S.optional(S.Array(S.String)),
+    "max": S.optional(S.Number),
+    "min": S.optional(S.Number),
+    "step": S.optional(S.Number),
 }) {}
 
 export class SingleSelectionConfig extends S.Class<SingleSelectionConfig>("SingleSelectionConfig")({
-    "bind": S.optional(S.NullOr(S.Record({ key: S.String, value: VgBinding}))),
-    "empty": S.optional(S.NullOr(Empty)),
-    "encodings": S.optional(S.NullOr(S.Array(SingleDefChannel))),
-    "fields": S.optional(S.NullOr(S.Array(S.String))),
-    "nearest": S.optional(S.NullOr(S.Boolean)),
+    "bind": S.optional(S.Record({ key: S.String, value: VgBinding})),
+    "empty": S.optional(Empty),
+    "encodings": S.optional(S.Array(SingleDefChannel)),
+    "fields": S.optional(S.Array(S.String)),
+    "nearest": S.optional(S.Boolean),
     "on": S.optional(S.Any),
-    "resolve": S.optional(S.NullOr(SelectionResolution)),
+    "resolve": S.optional(SelectionResolution),
 }) {}
 
 export class MultiSelectionConfig extends S.Class<MultiSelectionConfig>("MultiSelectionConfig")({
-    "empty": S.optional(S.NullOr(Empty)),
-    "encodings": S.optional(S.NullOr(S.Array(SingleDefChannel))),
-    "fields": S.optional(S.NullOr(S.Array(S.String))),
-    "nearest": S.optional(S.NullOr(S.Boolean)),
+    "empty": S.optional(Empty),
+    "encodings": S.optional(S.Array(SingleDefChannel)),
+    "fields": S.optional(S.Array(S.String)),
+    "nearest": S.optional(S.Boolean),
     "on": S.optional(S.Any),
-    "resolve": S.optional(S.NullOr(SelectionResolution)),
-    "toggle": S.optional(S.Union(S.Boolean, S.String, S.Null)),
+    "resolve": S.optional(SelectionResolution),
+    "toggle": S.optional(S.Union(S.Boolean, S.String)),
 }) {}
 
 export class BrushConfig extends S.Class<BrushConfig>("BrushConfig")({
-    "fill": S.optional(S.NullOr(S.String)),
-    "fillOpacity": S.optional(S.NullOr(S.Number)),
-    "stroke": S.optional(S.NullOr(S.String)),
-    "strokeDash": S.optional(S.NullOr(S.Array(S.Number))),
-    "strokeDashOffset": S.optional(S.NullOr(S.Number)),
-    "strokeOpacity": S.optional(S.NullOr(S.Number)),
-    "strokeWidth": S.optional(S.NullOr(S.Number)),
+    "fill": S.optional(S.String),
+    "fillOpacity": S.optional(S.Number),
+    "stroke": S.optional(S.String),
+    "strokeDash": S.optional(S.Array(S.Number)),
+    "strokeDashOffset": S.optional(S.Number),
+    "strokeOpacity": S.optional(S.Number),
+    "strokeWidth": S.optional(S.Number),
 }) {}
 
 export class IntervalSelectionConfig extends S.Class<IntervalSelectionConfig>("IntervalSelectionConfig")({
-    "bind": S.optional(S.NullOr(BindEnum)),
-    "empty": S.optional(S.NullOr(Empty)),
-    "encodings": S.optional(S.NullOr(S.Array(SingleDefChannel))),
-    "fields": S.optional(S.NullOr(S.Array(S.String))),
-    "mark": S.optional(S.NullOr(BrushConfig)),
+    "bind": S.optional(BindEnum),
+    "empty": S.optional(Empty),
+    "encodings": S.optional(S.Array(SingleDefChannel)),
+    "fields": S.optional(S.Array(S.String)),
+    "mark": S.optional(BrushConfig),
     "on": S.optional(S.Any),
-    "resolve": S.optional(S.NullOr(SelectionResolution)),
-    "translate": S.optional(S.Union(S.Boolean, S.String, S.Null)),
-    "zoom": S.optional(S.Union(S.Boolean, S.String, S.Null)),
+    "resolve": S.optional(SelectionResolution),
+    "translate": S.optional(S.Union(S.Boolean, S.String)),
+    "zoom": S.optional(S.Union(S.Boolean, S.String)),
+}) {}
+
+export class XClass extends S.Class<XClass>("XClass")({
+    "aggregate": S.optional(AggregateOp),
+    "axis": S.optional(S.NullOr(Axis)),
+    "bin": S.optional(S.Union(S.Boolean, BinParams)),
+    "field": S.optional(S.Union(S.String, RepeatRef)),
+    "scale": S.optional(Scale),
+    "sort": S.optional(S.Union(SortEnum, SortField, S.Null)),
+    "stack": S.optional(S.NullOr(StackOffset)),
+    "timeUnit": S.optional(TimeUnit),
+    "type": S.optional(Type),
+    "value": S.optional(S.Union(S.Boolean, S.Number, S.String)),
 }) {}
 
 export class SelectionConfig extends S.Class<SelectionConfig>("SelectionConfig")({
-    "interval": S.optional(S.NullOr(IntervalSelectionConfig)),
-    "multi": S.optional(S.NullOr(MultiSelectionConfig)),
-    "single": S.optional(S.NullOr(SingleSelectionConfig)),
+    "interval": S.optional(IntervalSelectionConfig),
+    "multi": S.optional(MultiSelectionConfig),
+    "single": S.optional(SingleSelectionConfig),
 }) {}
 
 export class ScaleConfig extends S.Class<ScaleConfig>("ScaleConfig")({
-    "bandPaddingInner": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "bandPaddingOuter": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "clamp": S.optional(S.NullOr(S.Boolean)),
-    "continuousPadding": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "maxBandSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "maxFontSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "maxOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "maxSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "maxStrokeWidth": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "minBandSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "minFontSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "minOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "minSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "minStrokeWidth": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "pointPadding": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
+    "bandPaddingInner": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "bandPaddingOuter": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "clamp": S.optional(S.Boolean),
+    "continuousPadding": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "maxBandSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "maxFontSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "maxOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "maxSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "maxStrokeWidth": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "minBandSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "minFontSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "minOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "minSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "minStrokeWidth": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "pointPadding": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
     "rangeStep": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "round": S.optional(S.NullOr(S.Boolean)),
-    "textXRangeStep": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "useUnaggregatedDomain": S.optional(S.NullOr(S.Boolean)),
+    "round": S.optional(S.Boolean),
+    "textXRangeStep": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "useUnaggregatedDomain": S.optional(S.Boolean),
 }) {}
 
 export class VgScheme extends S.Class<VgScheme>("VgScheme")({
-    "count": S.optional(S.NullOr(S.Number)),
-    "extent": S.optional(S.NullOr(S.Array(S.Number))),
-    "scheme": S.optional(S.NullOr(S.String)),
-    "step": S.optional(S.NullOr(S.Number)),
+    "count": S.optional(S.Number),
+    "extent": S.optional(S.Array(S.Number)),
+    "scheme": S.optional(S.String),
+    "step": S.optional(S.Number),
 }) {}
 
 export class ProjectionConfig extends S.Class<ProjectionConfig>("ProjectionConfig")({
-    "center": S.optional(S.NullOr(S.Array(S.Number))),
-    "clipAngle": S.optional(S.NullOr(S.Number)),
-    "clipExtent": S.optional(S.NullOr(S.Array(S.Array(S.Number)))),
-    "coefficient": S.optional(S.NullOr(S.Number)),
-    "distance": S.optional(S.NullOr(S.Number)),
-    "fraction": S.optional(S.NullOr(S.Number)),
-    "lobes": S.optional(S.NullOr(S.Number)),
-    "parallel": S.optional(S.NullOr(S.Number)),
-    "precision": S.optional(S.NullOr(S.Record({ key: S.String, value: S.Union(S.Number, S.String)}))),
-    "radius": S.optional(S.NullOr(S.Number)),
-    "ratio": S.optional(S.NullOr(S.Number)),
-    "rotate": S.optional(S.NullOr(S.Array(S.Number))),
-    "spacing": S.optional(S.NullOr(S.Number)),
-    "tilt": S.optional(S.NullOr(S.Number)),
-    "type": S.optional(S.NullOr(VgProjectionType)),
+    "center": S.optional(S.Array(S.Number)),
+    "clipAngle": S.optional(S.Number),
+    "clipExtent": S.optional(S.Array(S.Array(S.Number))),
+    "coefficient": S.optional(S.Number),
+    "distance": S.optional(S.Number),
+    "fraction": S.optional(S.Number),
+    "lobes": S.optional(S.Number),
+    "parallel": S.optional(S.Number),
+    "precision": S.optional(S.Record({ key: S.String, value: S.Union(S.Number, S.String)})),
+    "radius": S.optional(S.Number),
+    "ratio": S.optional(S.Number),
+    "rotate": S.optional(S.Array(S.Number)),
+    "spacing": S.optional(S.Number),
+    "tilt": S.optional(S.Number),
+    "type": S.optional(VgProjectionType),
+}) {}
+
+export class FacetMapping extends S.Class<FacetMapping>("FacetMapping")({
+    "column": S.optional(FacetFieldDef),
+    "row": S.optional(FacetFieldDef),
 }) {}
 
 export class PaddingClass extends S.Class<PaddingClass>("PaddingClass")({
-    "bottom": S.optional(S.NullOr(S.Number)),
-    "left": S.optional(S.NullOr(S.Number)),
-    "right": S.optional(S.NullOr(S.Number)),
-    "top": S.optional(S.NullOr(S.Number)),
+    "bottom": S.optional(S.Number),
+    "left": S.optional(S.Number),
+    "right": S.optional(S.Number),
+    "top": S.optional(S.Number),
 }) {}
 
 export class LegendConfig extends S.Class<LegendConfig>("LegendConfig")({
-    "cornerRadius": S.optional(S.NullOr(S.Number)),
-    "entryPadding": S.optional(S.NullOr(S.Number)),
-    "fillColor": S.optional(S.NullOr(S.String)),
-    "gradientHeight": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "gradientLabelBaseline": S.optional(S.NullOr(S.String)),
-    "gradientLabelLimit": S.optional(S.NullOr(S.Number)),
-    "gradientLabelOffset": S.optional(S.NullOr(S.Number)),
-    "gradientStrokeColor": S.optional(S.NullOr(S.String)),
-    "gradientStrokeWidth": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "gradientWidth": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "labelAlign": S.optional(S.NullOr(S.String)),
-    "labelBaseline": S.optional(S.NullOr(S.String)),
-    "labelColor": S.optional(S.NullOr(S.String)),
-    "labelFont": S.optional(S.NullOr(S.String)),
-    "labelFontSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "labelLimit": S.optional(S.NullOr(S.Number)),
-    "labelOffset": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "offset": S.optional(S.NullOr(S.Number)),
-    "orient": S.optional(S.NullOr(LegendOrient)),
-    "padding": S.optional(S.NullOr(S.Number)),
-    "shortTimeLabels": S.optional(S.NullOr(S.Boolean)),
-    "strokeColor": S.optional(S.NullOr(S.String)),
-    "strokeDash": S.optional(S.NullOr(S.Array(S.Number))),
-    "strokeWidth": S.optional(S.NullOr(S.Number)),
-    "symbolColor": S.optional(S.NullOr(S.String)),
-    "symbolSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "symbolStrokeWidth": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "symbolType": S.optional(S.NullOr(S.String)),
-    "titleAlign": S.optional(S.NullOr(S.String)),
-    "titleBaseline": S.optional(S.NullOr(S.String)),
-    "titleColor": S.optional(S.NullOr(S.String)),
-    "titleFont": S.optional(S.NullOr(S.String)),
-    "titleFontSize": S.optional(S.NullOr(S.Number)),
-    "titleFontWeight": S.optional(S.Union(S.Number, S.String, S.Null)),
-    "titleLimit": S.optional(S.NullOr(S.Number)),
-    "titlePadding": S.optional(S.NullOr(S.Number)),
+    "cornerRadius": S.optional(S.Number),
+    "entryPadding": S.optional(S.Number),
+    "fillColor": S.optional(S.String),
+    "gradientHeight": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "gradientLabelBaseline": S.optional(S.String),
+    "gradientLabelLimit": S.optional(S.Number),
+    "gradientLabelOffset": S.optional(S.Number),
+    "gradientStrokeColor": S.optional(S.String),
+    "gradientStrokeWidth": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "gradientWidth": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "labelAlign": S.optional(S.String),
+    "labelBaseline": S.optional(S.String),
+    "labelColor": S.optional(S.String),
+    "labelFont": S.optional(S.String),
+    "labelFontSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "labelLimit": S.optional(S.Number),
+    "labelOffset": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "offset": S.optional(S.Number),
+    "orient": S.optional(LegendOrient),
+    "padding": S.optional(S.Number),
+    "shortTimeLabels": S.optional(S.Boolean),
+    "strokeColor": S.optional(S.String),
+    "strokeDash": S.optional(S.Array(S.Number)),
+    "strokeWidth": S.optional(S.Number),
+    "symbolColor": S.optional(S.String),
+    "symbolSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "symbolStrokeWidth": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "symbolType": S.optional(S.String),
+    "titleAlign": S.optional(S.String),
+    "titleBaseline": S.optional(S.String),
+    "titleColor": S.optional(S.String),
+    "titleFont": S.optional(S.String),
+    "titleFontSize": S.optional(S.Number),
+    "titleFontWeight": S.optional(S.Union(S.Number, S.String)),
+    "titleLimit": S.optional(S.Number),
+    "titlePadding": S.optional(S.Number),
 }) {}
 
 export class BarConfig extends S.Class<BarConfig>("BarConfig")({
-    "align": S.optional(S.NullOr(HorizontalAlign)),
-    "angle": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(360)))),
-    "baseline": S.optional(S.NullOr(VerticalAlign)),
-    "binSpacing": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "color": S.optional(S.NullOr(S.String)),
-    "continuousBandSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "cursor": S.optional(S.NullOr(Cursor)),
-    "discreteBandSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "dx": S.optional(S.NullOr(S.Number)),
-    "dy": S.optional(S.NullOr(S.Number)),
-    "fill": S.optional(S.NullOr(S.String)),
-    "filled": S.optional(S.NullOr(S.Boolean)),
-    "fillOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "font": S.optional(S.NullOr(S.String)),
-    "fontSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "fontStyle": S.optional(S.NullOr(FontStyle)),
-    "fontWeight": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(100)).pipe(S.lessThanOrEqualTo(900)), FontWeight, S.Null)),
-    "href": S.optional(S.NullOr(S.String)),
-    "interpolate": S.optional(S.NullOr(Interpolate)),
-    "limit": S.optional(S.NullOr(S.Number)),
-    "opacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "orient": S.optional(S.NullOr(Orient)),
-    "radius": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "shape": S.optional(S.NullOr(S.String)),
-    "size": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "stroke": S.optional(S.NullOr(S.String)),
-    "strokeDash": S.optional(S.NullOr(S.Array(S.Number))),
-    "strokeDashOffset": S.optional(S.NullOr(S.Number)),
-    "strokeOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "strokeWidth": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "tension": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "text": S.optional(S.NullOr(S.String)),
-    "theta": S.optional(S.NullOr(S.Number)),
+    "align": S.optional(HorizontalAlign),
+    "angle": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(360))),
+    "baseline": S.optional(VerticalAlign),
+    "binSpacing": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "color": S.optional(S.String),
+    "continuousBandSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "cursor": S.optional(Cursor),
+    "discreteBandSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "dx": S.optional(S.Number),
+    "dy": S.optional(S.Number),
+    "fill": S.optional(S.String),
+    "filled": S.optional(S.Boolean),
+    "fillOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "font": S.optional(S.String),
+    "fontSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "fontStyle": S.optional(FontStyle),
+    "fontWeight": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(100)).pipe(S.lessThanOrEqualTo(900)), FontWeight)),
+    "href": S.optional(S.String),
+    "interpolate": S.optional(Interpolate),
+    "limit": S.optional(S.Number),
+    "opacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "orient": S.optional(Orient),
+    "radius": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "shape": S.optional(S.String),
+    "size": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "stroke": S.optional(S.String),
+    "strokeDash": S.optional(S.Array(S.Number)),
+    "strokeDashOffset": S.optional(S.Number),
+    "strokeOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "strokeWidth": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "tension": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "text": S.optional(S.String),
+    "theta": S.optional(S.Number),
 }) {}
 
 export class VgAxisConfig extends S.Class<VgAxisConfig>("VgAxisConfig")({
-    "bandPosition": S.optional(S.NullOr(S.Number)),
-    "domain": S.optional(S.NullOr(S.Boolean)),
-    "domainColor": S.optional(S.NullOr(S.String)),
-    "domainWidth": S.optional(S.NullOr(S.Number)),
-    "grid": S.optional(S.NullOr(S.Boolean)),
-    "gridColor": S.optional(S.NullOr(S.String)),
-    "gridDash": S.optional(S.NullOr(S.Array(S.Number))),
-    "gridOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "gridWidth": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "labelAngle": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(-360)).pipe(S.lessThanOrEqualTo(360)))),
-    "labelBound": S.optional(S.Union(S.Boolean, S.Number, S.Null)),
-    "labelColor": S.optional(S.NullOr(S.String)),
-    "labelFlush": S.optional(S.Union(S.Boolean, S.Number, S.Null)),
-    "labelFont": S.optional(S.NullOr(S.String)),
-    "labelFontSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "labelLimit": S.optional(S.NullOr(S.Number)),
-    "labelOverlap": S.optional(S.Union(S.Boolean, LabelOverlapEnum, S.Null)),
-    "labelPadding": S.optional(S.NullOr(S.Number)),
-    "labels": S.optional(S.NullOr(S.Boolean)),
-    "maxExtent": S.optional(S.NullOr(S.Number)),
-    "minExtent": S.optional(S.NullOr(S.Number)),
-    "tickColor": S.optional(S.NullOr(S.String)),
-    "tickRound": S.optional(S.NullOr(S.Boolean)),
-    "ticks": S.optional(S.NullOr(S.Boolean)),
-    "tickSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "tickWidth": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "titleAlign": S.optional(S.NullOr(S.String)),
-    "titleAngle": S.optional(S.NullOr(S.Number)),
-    "titleBaseline": S.optional(S.NullOr(S.String)),
-    "titleColor": S.optional(S.NullOr(S.String)),
-    "titleFont": S.optional(S.NullOr(S.String)),
-    "titleFontSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "titleFontWeight": S.optional(S.Union(S.Number, S.String, S.Null)),
-    "titleLimit": S.optional(S.NullOr(S.Number)),
-    "titleMaxLength": S.optional(S.NullOr(S.Number)),
-    "titlePadding": S.optional(S.NullOr(S.Number)),
-    "titleX": S.optional(S.NullOr(S.Number)),
-    "titleY": S.optional(S.NullOr(S.Number)),
+    "bandPosition": S.optional(S.Number),
+    "domain": S.optional(S.Boolean),
+    "domainColor": S.optional(S.String),
+    "domainWidth": S.optional(S.Number),
+    "grid": S.optional(S.Boolean),
+    "gridColor": S.optional(S.String),
+    "gridDash": S.optional(S.Array(S.Number)),
+    "gridOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "gridWidth": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "labelAngle": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(-360)).pipe(S.lessThanOrEqualTo(360))),
+    "labelBound": S.optional(S.Union(S.Boolean, S.Number)),
+    "labelColor": S.optional(S.String),
+    "labelFlush": S.optional(S.Union(S.Boolean, S.Number)),
+    "labelFont": S.optional(S.String),
+    "labelFontSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "labelLimit": S.optional(S.Number),
+    "labelOverlap": S.optional(S.Union(S.Boolean, LabelOverlapEnum)),
+    "labelPadding": S.optional(S.Number),
+    "labels": S.optional(S.Boolean),
+    "maxExtent": S.optional(S.Number),
+    "minExtent": S.optional(S.Number),
+    "tickColor": S.optional(S.String),
+    "tickRound": S.optional(S.Boolean),
+    "ticks": S.optional(S.Boolean),
+    "tickSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "tickWidth": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "titleAlign": S.optional(S.String),
+    "titleAngle": S.optional(S.Number),
+    "titleBaseline": S.optional(S.String),
+    "titleColor": S.optional(S.String),
+    "titleFont": S.optional(S.String),
+    "titleFontSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "titleFontWeight": S.optional(S.Union(S.Number, S.String)),
+    "titleLimit": S.optional(S.Number),
+    "titleMaxLength": S.optional(S.Number),
+    "titlePadding": S.optional(S.Number),
+    "titleX": S.optional(S.Number),
+    "titleY": S.optional(S.Number),
 }) {}
 
 export class AxisConfig extends S.Class<AxisConfig>("AxisConfig")({
-    "bandPosition": S.optional(S.NullOr(S.Number)),
-    "domain": S.optional(S.NullOr(S.Boolean)),
-    "domainColor": S.optional(S.NullOr(S.String)),
-    "domainWidth": S.optional(S.NullOr(S.Number)),
-    "grid": S.optional(S.NullOr(S.Boolean)),
-    "gridColor": S.optional(S.NullOr(S.String)),
-    "gridDash": S.optional(S.NullOr(S.Array(S.Number))),
-    "gridOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "gridWidth": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "labelAngle": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(-360)).pipe(S.lessThanOrEqualTo(360)))),
-    "labelBound": S.optional(S.Union(S.Boolean, S.Number, S.Null)),
-    "labelColor": S.optional(S.NullOr(S.String)),
-    "labelFlush": S.optional(S.Union(S.Boolean, S.Number, S.Null)),
-    "labelFont": S.optional(S.NullOr(S.String)),
-    "labelFontSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "labelLimit": S.optional(S.NullOr(S.Number)),
-    "labelOverlap": S.optional(S.Union(S.Boolean, LabelOverlapEnum, S.Null)),
-    "labelPadding": S.optional(S.NullOr(S.Number)),
-    "labels": S.optional(S.NullOr(S.Boolean)),
-    "maxExtent": S.optional(S.NullOr(S.Number)),
-    "minExtent": S.optional(S.NullOr(S.Number)),
-    "shortTimeLabels": S.optional(S.NullOr(S.Boolean)),
-    "tickColor": S.optional(S.NullOr(S.String)),
-    "tickRound": S.optional(S.NullOr(S.Boolean)),
-    "ticks": S.optional(S.NullOr(S.Boolean)),
-    "tickSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "tickWidth": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "titleAlign": S.optional(S.NullOr(S.String)),
-    "titleAngle": S.optional(S.NullOr(S.Number)),
-    "titleBaseline": S.optional(S.NullOr(S.String)),
-    "titleColor": S.optional(S.NullOr(S.String)),
-    "titleFont": S.optional(S.NullOr(S.String)),
-    "titleFontSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "titleFontWeight": S.optional(S.Union(S.Number, S.String, S.Null)),
-    "titleLimit": S.optional(S.NullOr(S.Number)),
-    "titleMaxLength": S.optional(S.NullOr(S.Number)),
-    "titlePadding": S.optional(S.NullOr(S.Number)),
-    "titleX": S.optional(S.NullOr(S.Number)),
-    "titleY": S.optional(S.NullOr(S.Number)),
+    "bandPosition": S.optional(S.Number),
+    "domain": S.optional(S.Boolean),
+    "domainColor": S.optional(S.String),
+    "domainWidth": S.optional(S.Number),
+    "grid": S.optional(S.Boolean),
+    "gridColor": S.optional(S.String),
+    "gridDash": S.optional(S.Array(S.Number)),
+    "gridOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "gridWidth": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "labelAngle": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(-360)).pipe(S.lessThanOrEqualTo(360))),
+    "labelBound": S.optional(S.Union(S.Boolean, S.Number)),
+    "labelColor": S.optional(S.String),
+    "labelFlush": S.optional(S.Union(S.Boolean, S.Number)),
+    "labelFont": S.optional(S.String),
+    "labelFontSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "labelLimit": S.optional(S.Number),
+    "labelOverlap": S.optional(S.Union(S.Boolean, LabelOverlapEnum)),
+    "labelPadding": S.optional(S.Number),
+    "labels": S.optional(S.Boolean),
+    "maxExtent": S.optional(S.Number),
+    "minExtent": S.optional(S.Number),
+    "shortTimeLabels": S.optional(S.Boolean),
+    "tickColor": S.optional(S.String),
+    "tickRound": S.optional(S.Boolean),
+    "ticks": S.optional(S.Boolean),
+    "tickSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "tickWidth": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "titleAlign": S.optional(S.String),
+    "titleAngle": S.optional(S.Number),
+    "titleBaseline": S.optional(S.String),
+    "titleColor": S.optional(S.String),
+    "titleFont": S.optional(S.String),
+    "titleFontSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "titleFontWeight": S.optional(S.Union(S.Number, S.String)),
+    "titleLimit": S.optional(S.Number),
+    "titleMaxLength": S.optional(S.Number),
+    "titlePadding": S.optional(S.Number),
+    "titleX": S.optional(S.Number),
+    "titleY": S.optional(S.Number),
 }) {}
 
 export class MarkConfig extends S.Class<MarkConfig>("MarkConfig")({
-    "align": S.optional(S.NullOr(HorizontalAlign)),
-    "angle": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(360)))),
-    "baseline": S.optional(S.NullOr(VerticalAlign)),
-    "color": S.optional(S.NullOr(S.String)),
-    "cursor": S.optional(S.NullOr(Cursor)),
-    "dx": S.optional(S.NullOr(S.Number)),
-    "dy": S.optional(S.NullOr(S.Number)),
-    "fill": S.optional(S.NullOr(S.String)),
-    "filled": S.optional(S.NullOr(S.Boolean)),
-    "fillOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "font": S.optional(S.NullOr(S.String)),
-    "fontSize": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "fontStyle": S.optional(S.NullOr(FontStyle)),
-    "fontWeight": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(100)).pipe(S.lessThanOrEqualTo(900)), FontWeight, S.Null)),
-    "href": S.optional(S.NullOr(S.String)),
-    "interpolate": S.optional(S.NullOr(Interpolate)),
-    "limit": S.optional(S.NullOr(S.Number)),
-    "opacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "orient": S.optional(S.NullOr(Orient)),
-    "radius": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "shape": S.optional(S.NullOr(S.String)),
-    "size": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "stroke": S.optional(S.NullOr(S.String)),
-    "strokeDash": S.optional(S.NullOr(S.Array(S.Number))),
-    "strokeDashOffset": S.optional(S.NullOr(S.Number)),
-    "strokeOpacity": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "strokeWidth": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)))),
-    "tension": S.optional(S.NullOr(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1)))),
-    "text": S.optional(S.NullOr(S.String)),
-    "theta": S.optional(S.NullOr(S.Number)),
+    "align": S.optional(HorizontalAlign),
+    "angle": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(360))),
+    "baseline": S.optional(VerticalAlign),
+    "color": S.optional(S.String),
+    "cursor": S.optional(Cursor),
+    "dx": S.optional(S.Number),
+    "dy": S.optional(S.Number),
+    "fill": S.optional(S.String),
+    "filled": S.optional(S.Boolean),
+    "fillOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "font": S.optional(S.String),
+    "fontSize": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "fontStyle": S.optional(FontStyle),
+    "fontWeight": S.optional(S.Union(S.Number.pipe(S.greaterThanOrEqualTo(100)).pipe(S.lessThanOrEqualTo(900)), FontWeight)),
+    "href": S.optional(S.String),
+    "interpolate": S.optional(Interpolate),
+    "limit": S.optional(S.Number),
+    "opacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "orient": S.optional(Orient),
+    "radius": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "shape": S.optional(S.String),
+    "size": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "stroke": S.optional(S.String),
+    "strokeDash": S.optional(S.Array(S.Number)),
+    "strokeDashOffset": S.optional(S.Number),
+    "strokeOpacity": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "strokeWidth": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0))),
+    "tension": S.optional(S.Number.pipe(S.greaterThanOrEqualTo(0)).pipe(S.lessThanOrEqualTo(1))),
+    "text": S.optional(S.String),
+    "theta": S.optional(S.Number),
 }) {}
 
 export class Config extends S.Class<Config>("Config")({
-    "area": S.optional(S.NullOr(MarkConfig)),
-    "autosize": S.optional(S.Union(AutosizeType, S.suspend(() => AutoSizeParams), S.Null)),
-    "axis": S.optional(S.NullOr(AxisConfig)),
-    "axisBand": S.optional(S.NullOr(VgAxisConfig)),
-    "axisBottom": S.optional(S.NullOr(VgAxisConfig)),
-    "axisLeft": S.optional(S.NullOr(VgAxisConfig)),
-    "axisRight": S.optional(S.NullOr(VgAxisConfig)),
-    "axisTop": S.optional(S.NullOr(VgAxisConfig)),
-    "axisX": S.optional(S.NullOr(VgAxisConfig)),
-    "axisY": S.optional(S.NullOr(VgAxisConfig)),
-    "background": S.optional(S.NullOr(S.String)),
-    "bar": S.optional(S.NullOr(BarConfig)),
-    "circle": S.optional(S.NullOr(MarkConfig)),
-    "countTitle": S.optional(S.NullOr(S.String)),
-    "fieldTitle": S.optional(S.NullOr(FieldTitle)),
-    "geoshape": S.optional(S.NullOr(MarkConfig)),
-    "invalidValues": S.optional(S.NullOr(InvalidValues)),
-    "legend": S.optional(S.NullOr(LegendConfig)),
-    "line": S.optional(S.NullOr(MarkConfig)),
-    "mark": S.optional(S.NullOr(MarkConfig)),
-    "numberFormat": S.optional(S.NullOr(S.String)),
-    "padding": S.optional(S.Union(S.Number, PaddingClass, S.Null)),
-    "point": S.optional(S.NullOr(MarkConfig)),
-    "projection": S.optional(S.NullOr(ProjectionConfig)),
-    "range": S.optional(S.NullOr(S.Record({ key: S.String, value: S.Union(S.Array(S.Union(S.Number, S.String)), VgScheme)}))),
-    "rect": S.optional(S.NullOr(MarkConfig)),
-    "rule": S.optional(S.NullOr(MarkConfig)),
-    "scale": S.optional(S.NullOr(ScaleConfig)),
-    "selection": S.optional(S.NullOr(SelectionConfig)),
-    "square": S.optional(S.NullOr(MarkConfig)),
-    "stack": S.optional(S.NullOr(StackOffset)),
-    "style": S.optional(S.NullOr(S.Record({ key: S.String, value: VgMarkConfig}))),
-    "text": S.optional(S.NullOr(TextConfig)),
-    "tick": S.optional(S.NullOr(TickConfig)),
-    "timeFormat": S.optional(S.NullOr(S.String)),
-    "title": S.optional(S.NullOr(VgTitleConfig)),
-    "view": S.optional(S.NullOr(ViewConfig)),
+    "area": S.optional(MarkConfig),
+    "autosize": S.optional(S.Union(AutosizeType, S.suspend(() => AutoSizeParams))),
+    "axis": S.optional(AxisConfig),
+    "axisBand": S.optional(VgAxisConfig),
+    "axisBottom": S.optional(VgAxisConfig),
+    "axisLeft": S.optional(VgAxisConfig),
+    "axisRight": S.optional(VgAxisConfig),
+    "axisTop": S.optional(VgAxisConfig),
+    "axisX": S.optional(VgAxisConfig),
+    "axisY": S.optional(VgAxisConfig),
+    "background": S.optional(S.String),
+    "bar": S.optional(BarConfig),
+    "circle": S.optional(MarkConfig),
+    "countTitle": S.optional(S.String),
+    "fieldTitle": S.optional(FieldTitle),
+    "geoshape": S.optional(MarkConfig),
+    "invalidValues": S.optional(InvalidValues),
+    "legend": S.optional(LegendConfig),
+    "line": S.optional(MarkConfig),
+    "mark": S.optional(MarkConfig),
+    "numberFormat": S.optional(S.String),
+    "padding": S.optional(S.Union(S.Number, PaddingClass)),
+    "point": S.optional(MarkConfig),
+    "projection": S.optional(ProjectionConfig),
+    "range": S.optional(S.Record({ key: S.String, value: S.Union(S.Array(S.Union(S.Number, S.String)), VgScheme)})),
+    "rect": S.optional(MarkConfig),
+    "rule": S.optional(MarkConfig),
+    "scale": S.optional(ScaleConfig),
+    "selection": S.optional(SelectionConfig),
+    "square": S.optional(MarkConfig),
+    "stack": S.optional(StackOffset),
+    "style": S.optional(S.Record({ key: S.String, value: VgMarkConfig})),
+    "text": S.optional(TextConfig),
+    "tick": S.optional(TickConfig),
+    "timeFormat": S.optional(S.String),
+    "title": S.optional(VgTitleConfig),
+    "view": S.optional(ViewConfig),
 }) {}
 
 export class AutoSizeParams extends S.Class<AutoSizeParams>("AutoSizeParams")({
-    "contains": S.optional(S.NullOr(Contains)),
-    "resize": S.optional(S.NullOr(S.Boolean)),
-    "type": S.optional(S.NullOr(AutosizeType)),
+    "contains": S.optional(Contains),
+    "resize": S.optional(S.Boolean),
+    "type": S.optional(AutosizeType),
+}) {}
+
+export class Encoding extends S.Class<Encoding>("Encoding")({
+    "color": S.optional(MarkPropDefWithCondition),
+    "detail": S.optional(S.Union(S.Array(FieldDef), FieldDef)),
+    "href": S.optional(DefWithCondition),
+    "opacity": S.optional(MarkPropDefWithCondition),
+    "order": S.optional(S.Union(S.Array(OrderFieldDef), OrderFieldDef)),
+    "shape": S.optional(MarkPropDefWithCondition),
+    "size": S.optional(MarkPropDefWithCondition),
+    "text": S.optional(TextDefWithCondition),
+    "tooltip": S.optional(TextDefWithCondition),
+    "x": S.optional(XClass),
+    "x2": S.optional(X2Class),
+    "y": S.optional(XClass),
+    "y2": S.optional(X2Class),
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "$schema": S.optional(S.NullOr(S.String)),
-    "autosize": S.optional(S.Union(AutosizeType, AutoSizeParams, S.Null)),
-    "background": S.optional(S.NullOr(S.String)),
-    "config": S.optional(S.NullOr(Config)),
-    "data": S.optional(S.NullOr(Data)),
-    "description": S.optional(S.NullOr(S.String)),
-    "encoding": S.optional(S.NullOr(EncodingWithFacet)),
-    "height": S.optional(S.NullOr(S.Number)),
-    "mark": S.optional(S.Union(Mark, MarkDef, S.Null)),
-    "name": S.optional(S.NullOr(S.String)),
-    "padding": S.optional(S.Union(S.Number, PaddingClass, S.Null)),
-    "projection": S.optional(S.NullOr(Projection)),
-    "selection": S.optional(S.NullOr(S.Record({ key: S.String, value: SelectionDef}))),
-    "title": S.optional(S.Union(S.String, TitleParams, S.Null)),
-    "transform": S.optional(S.NullOr(S.Array(Transform))),
-    "width": S.optional(S.NullOr(S.Number)),
-    "layer": S.optional(S.NullOr(S.Array(LayerSpec))),
-    "resolve": S.optional(S.NullOr(Resolve)),
-    "facet": S.optional(S.NullOr(FacetMapping)),
-    "spec": S.optional(S.NullOr(Spec)),
-    "repeat": S.optional(S.NullOr(Repeat)),
-    "vconcat": S.optional(S.NullOr(S.Array(Spec))),
-    "hconcat": S.optional(S.NullOr(S.Array(Spec))),
+    "$schema": S.optional(S.String),
+    "autosize": S.optional(S.Union(AutosizeType, AutoSizeParams)),
+    "background": S.optional(S.String),
+    "config": S.optional(Config),
+    "data": S.optional(Data),
+    "description": S.optional(S.String),
+    "encoding": S.optional(EncodingWithFacet),
+    "height": S.optional(S.Number),
+    "mark": S.optional(S.Union(Mark, MarkDef)),
+    "name": S.optional(S.String),
+    "padding": S.optional(S.Union(S.Number, PaddingClass)),
+    "projection": S.optional(Projection),
+    "selection": S.optional(S.Record({ key: S.String, value: SelectionDef})),
+    "title": S.optional(S.Union(S.String, TitleParams)),
+    "transform": S.optional(S.Array(Transform)),
+    "width": S.optional(S.Number),
+    "layer": S.optional(S.Array(S.suspend(() => LayerSpec))),
+    "resolve": S.optional(Resolve),
+    "facet": S.optional(FacetMapping),
+    "spec": S.optional(S.suspend(() => Spec)),
+    "repeat": S.optional(Repeat),
+    "vconcat": S.optional(S.Array(S.suspend(() => Spec))),
+    "hconcat": S.optional(S.Array(S.suspend(() => Spec))),
+}) {}
+
+export class Spec extends S.Class<Spec>("Spec")({
+    "data": S.optional(Data),
+    "description": S.optional(S.String),
+    "height": S.optional(S.Number),
+    "layer": S.optional(S.Array(S.suspend(() => LayerSpec))),
+    "name": S.optional(S.String),
+    "resolve": S.optional(Resolve),
+    "title": S.optional(S.Union(S.String, TitleParams)),
+    "transform": S.optional(S.Array(Transform)),
+    "width": S.optional(S.Number),
+    "encoding": S.optional(Encoding),
+    "mark": S.optional(S.Union(Mark, MarkDef)),
+    "projection": S.optional(Projection),
+    "selection": S.optional(S.Record({ key: S.String, value: SelectionDef})),
+    "facet": S.optional(FacetMapping),
+    "spec": S.optional(S.suspend(() => Spec)),
+    "repeat": S.optional(Repeat),
+    "vconcat": S.optional(S.Array(S.suspend(() => Spec))),
+    "hconcat": S.optional(S.Array(S.suspend(() => Spec))),
+}) {}
+
+export class LayerSpec extends S.Class<LayerSpec>("LayerSpec")({
+    "data": S.optional(Data),
+    "description": S.optional(S.String),
+    "height": S.optional(S.Number),
+    "layer": S.optional(S.Array(S.suspend(() => LayerSpec))),
+    "name": S.optional(S.String),
+    "resolve": S.optional(Resolve),
+    "title": S.optional(S.Union(S.String, TitleParams)),
+    "transform": S.optional(S.Array(Transform)),
+    "width": S.optional(S.Number),
+    "encoding": S.optional(Encoding),
+    "mark": S.optional(S.Union(Mark, MarkDef)),
+    "projection": S.optional(Projection),
+    "selection": S.optional(S.Record({ key: S.String, value: SelectionDef})),
 }) {}
diff --git a/head/schema-typescript-zod/test/inputs/schema/optional-property.schema/default/TopLevel.ts b/head/schema-typescript-zod/test/inputs/schema/optional-property.schema/default/TopLevel.ts
new file mode 100644
index 0000000..7e9faa2
--- /dev/null
+++ b/head/schema-typescript-zod/test/inputs/schema/optional-property.schema/default/TopLevel.ts
@@ -0,0 +1,7 @@
+import * as z from "zod";
+
+
+export const TopLevelSchema = z.object({
+    "value": z.string().optional(),
+});
+export type TopLevel = z.infer<typeof TopLevelSchema>;
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/0a91a.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/0a91a.json/default/TopLevel.ts
index c53b426..25aee95 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/0a91a.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/0a91a.json/default/TopLevel.ts
@@ -189,25 +189,25 @@ export class Commit extends S.Class<Commit>("Commit")({
 }) {}
 
 export class Payload extends S.Class<Payload>("Payload")({
-    "action": S.optional(S.NullOr(S.String)),
-    "before": S.optional(S.NullOr(S.String)),
-    "commits": S.optional(S.NullOr(S.Array(Commit))),
+    "action": S.optional(S.String),
+    "before": S.optional(S.String),
+    "commits": S.optional(S.Array(Commit)),
     "description": S.optional(S.NullOr(S.String)),
-    "distinct_size": S.optional(S.NullOr(S.Int)),
-    "head": S.optional(S.NullOr(S.String)),
-    "master_branch": S.optional(S.NullOr(S.String)),
-    "number": S.optional(S.NullOr(S.Int)),
-    "pull_request": S.optional(S.NullOr(PullRequest)),
-    "push_id": S.optional(S.NullOr(S.Int)),
-    "pusher_type": S.optional(S.NullOr(S.String)),
-    "ref": S.optional(S.NullOr(S.String)),
-    "ref_type": S.optional(S.NullOr(S.String)),
-    "size": S.optional(S.NullOr(S.Int)),
+    "distinct_size": S.optional(S.Int),
+    "head": S.optional(S.String),
+    "master_branch": S.optional(S.String),
+    "number": S.optional(S.Int),
+    "pull_request": S.optional(PullRequest),
+    "push_id": S.optional(S.Int),
+    "pusher_type": S.optional(S.String),
+    "ref": S.optional(S.String),
+    "ref_type": S.optional(S.String),
+    "size": S.optional(S.Int),
 }) {}
 
 export class Actor extends S.Class<Actor>("Actor")({
     "avatar_url": S.String,
-    "display_login": S.optional(S.NullOr(S.String)),
+    "display_login": S.optional(S.String),
     "gravatar_id": S.String,
     "id": S.Int,
     "login": S.String,
@@ -218,7 +218,7 @@ export class TopLevelElement extends S.Class<TopLevelElement>("TopLevelElement")
     "actor": Actor,
     "created_at": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)),
     "id": S.String,
-    "org": S.optional(S.NullOr(Actor)),
+    "org": S.optional(Actor),
     "payload": Payload,
     "public": S.Boolean,
     "repo": TopLevelRepo,
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/0cffa.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/0cffa.json/default/TopLevel.ts
index 28d9600..8488ea9 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/0cffa.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/0cffa.json/default/TopLevel.ts
@@ -49,11 +49,11 @@ export class Looping extends S.Class<Looping>("Looping")({
 }) {}
 
 export class FixedHeight extends S.Class<FixedHeight>("FixedHeight")({
-    "frames": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
-    "hash": S.optional(S.NullOr(S.String)),
+    "frames": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
+    "hash": S.optional(S.String),
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "mp4": S.optional(S.NullOr(S.String)),
-    "mp4_size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "mp4": S.optional(S.String),
+    "mp4_size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "size": S.String.pipe(S.pattern(/^-?\d+$/)),
     "url": S.String,
     "webp": S.String,
@@ -68,37 +68,37 @@ export class DownsizedSmall extends S.Class<DownsizedSmall>("DownsizedSmall")({
     "width": S.String.pipe(S.pattern(/^-?\d+$/)),
 }) {}
 
-export class Downsized extends S.Class<Downsized>("Downsized")({
+export class The480_WStill extends S.Class<The480_WStill>("The480_WStill")({
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "url": S.String,
     "width": S.String.pipe(S.pattern(/^-?\d+$/)),
 }) {}
 
 export class Images extends S.Class<Images>("Images")({
-    "downsized": Downsized,
-    "downsized_large": Downsized,
-    "downsized_medium": Downsized,
+    "downsized": The480_WStill,
+    "downsized_large": The480_WStill,
+    "downsized_medium": The480_WStill,
     "downsized_small": DownsizedSmall,
-    "downsized_still": Downsized,
+    "downsized_still": The480_WStill,
     "fixed_height": FixedHeight,
     "fixed_height_downsampled": FixedHeight,
     "fixed_height_small": FixedHeight,
-    "fixed_height_small_still": Downsized,
-    "fixed_height_still": Downsized,
+    "fixed_height_small_still": The480_WStill,
+    "fixed_height_still": The480_WStill,
     "fixed_width": FixedHeight,
     "fixed_width_downsampled": FixedHeight,
     "fixed_width_small": FixedHeight,
-    "fixed_width_small_still": Downsized,
-    "fixed_width_still": Downsized,
+    "fixed_width_small_still": The480_WStill,
+    "fixed_width_still": The480_WStill,
     "looping": Looping,
     "original": FixedHeight,
     "original_mp4": DownsizedSmall,
-    "original_still": Downsized,
+    "original_still": The480_WStill,
     "preview": DownsizedSmall,
-    "preview_gif": Downsized,
-    "preview_webp": Downsized,
-    "480w_still": S.optional(S.NullOr(Downsized)),
+    "preview_gif": The480_WStill,
+    "preview_webp": The480_WStill,
+    "480w_still": S.optional(The480_WStill),
 }) {}
 
 export class Datum extends S.Class<Datum>("Datum")({
@@ -118,7 +118,7 @@ export class Datum extends S.Class<Datum>("Datum")({
     "trending_datetime": S.String,
     "type": Type,
     "url": S.String,
-    "user": S.optional(S.NullOr(User)),
+    "user": S.optional(User),
     "username": Username,
 }) {}
 
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/127a1.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/127a1.json/default/TopLevel.ts
index b55d502..f74ff2e 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/127a1.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/127a1.json/default/TopLevel.ts
@@ -38,7 +38,7 @@ export class User extends S.Class<User>("User")({
     "banner_url": S.String,
     "display_name": S.String,
     "profile_url": S.String,
-    "twitter": S.optional(S.NullOr(S.String)),
+    "twitter": S.optional(S.String),
     "username": Username,
 }) {}
 
@@ -48,11 +48,11 @@ export class Looping extends S.Class<Looping>("Looping")({
 }) {}
 
 export class FixedHeight extends S.Class<FixedHeight>("FixedHeight")({
-    "frames": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
-    "hash": S.optional(S.NullOr(S.String)),
+    "frames": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
+    "hash": S.optional(S.String),
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "mp4": S.optional(S.NullOr(S.String)),
-    "mp4_size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "mp4": S.optional(S.String),
+    "mp4_size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "size": S.String.pipe(S.pattern(/^-?\d+$/)),
     "url": S.String,
     "webp": S.String,
@@ -67,37 +67,37 @@ export class DownsizedSmall extends S.Class<DownsizedSmall>("DownsizedSmall")({
     "width": S.String.pipe(S.pattern(/^-?\d+$/)),
 }) {}
 
-export class Downsized extends S.Class<Downsized>("Downsized")({
+export class The480_WStill extends S.Class<The480_WStill>("The480_WStill")({
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "url": S.String,
     "width": S.String.pipe(S.pattern(/^-?\d+$/)),
 }) {}
 
 export class Images extends S.Class<Images>("Images")({
-    "downsized": Downsized,
-    "downsized_large": Downsized,
-    "downsized_medium": Downsized,
+    "downsized": The480_WStill,
+    "downsized_large": The480_WStill,
+    "downsized_medium": The480_WStill,
     "downsized_small": DownsizedSmall,
-    "downsized_still": Downsized,
+    "downsized_still": The480_WStill,
     "fixed_height": FixedHeight,
     "fixed_height_downsampled": FixedHeight,
     "fixed_height_small": FixedHeight,
-    "fixed_height_small_still": Downsized,
-    "fixed_height_still": Downsized,
+    "fixed_height_small_still": The480_WStill,
+    "fixed_height_still": The480_WStill,
     "fixed_width": FixedHeight,
     "fixed_width_downsampled": FixedHeight,
     "fixed_width_small": FixedHeight,
-    "fixed_width_small_still": Downsized,
-    "fixed_width_still": Downsized,
+    "fixed_width_small_still": The480_WStill,
+    "fixed_width_still": The480_WStill,
     "looping": Looping,
     "original": FixedHeight,
     "original_mp4": DownsizedSmall,
-    "original_still": Downsized,
+    "original_still": The480_WStill,
     "preview": DownsizedSmall,
-    "preview_gif": Downsized,
-    "preview_webp": Downsized,
-    "480w_still": S.optional(S.NullOr(Downsized)),
+    "preview_gif": The480_WStill,
+    "preview_webp": The480_WStill,
+    "480w_still": S.optional(The480_WStill),
 }) {}
 
 export class Datum extends S.Class<Datum>("Datum")({
@@ -117,7 +117,7 @@ export class Datum extends S.Class<Datum>("Datum")({
     "trending_datetime": S.String,
     "type": Type,
     "url": S.String,
-    "user": S.optional(S.NullOr(User)),
+    "user": S.optional(User),
     "username": Username,
 }) {}
 
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/176f1.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/176f1.json/default/TopLevel.ts
index 1bb3a07..defca9f 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/176f1.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/176f1.json/default/TopLevel.ts
@@ -2,8 +2,8 @@ import * as S from "effect/Schema";
 
 
 export class Footnote extends S.Class<Footnote>("Footnote")({
-    "code": S.optional(S.NullOr(S.String)),
-    "text": S.optional(S.NullOr(S.String)),
+    "code": S.optional(S.String),
+    "text": S.optional(S.String),
 }) {}
 
 export class Datum extends S.Class<Datum>("Datum")({
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/1b409.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/1b409.json/default/TopLevel.ts
index 2fc3a17..0f86d0c 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/1b409.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/1b409.json/default/TopLevel.ts
@@ -75,10 +75,10 @@ export class Person extends S.Class<Person>("Person")({
 
 export class Extra extends S.Class<Extra>("Extra")({
     "address": S.String,
-    "contact_form": S.optional(S.NullOr(S.String)),
+    "contact_form": S.optional(S.String),
     "fax": S.optional(S.NullOr(S.String)),
     "office": S.String,
-    "rss_url": S.optional(S.NullOr(S.String)),
+    "rss_url": S.optional(S.String),
 }) {}
 
 export class ObjectElement extends S.Class<ObjectElement>("ObjectElement")({
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/26b49.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/26b49.json/default/TopLevel.ts
index 1a727b9..3351f06 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/26b49.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/26b49.json/default/TopLevel.ts
@@ -32,7 +32,7 @@ export class User extends S.Class<User>("User")({
     "banner_url": S.String,
     "display_name": S.String,
     "profile_url": S.String,
-    "twitter": S.optional(S.NullOr(S.String)),
+    "twitter": S.optional(S.String),
     "username": S.String,
 }) {}
 
@@ -42,11 +42,11 @@ export class Looping extends S.Class<Looping>("Looping")({
 }) {}
 
 export class FixedHeight extends S.Class<FixedHeight>("FixedHeight")({
-    "frames": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
-    "hash": S.optional(S.NullOr(S.String)),
+    "frames": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
+    "hash": S.optional(S.String),
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "mp4": S.optional(S.NullOr(S.String)),
-    "mp4_size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "mp4": S.optional(S.String),
+    "mp4_size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "size": S.String.pipe(S.pattern(/^-?\d+$/)),
     "url": S.String,
     "webp": S.String,
@@ -61,38 +61,38 @@ export class DownsizedSmall extends S.Class<DownsizedSmall>("DownsizedSmall")({
     "width": S.String.pipe(S.pattern(/^-?\d+$/)),
 }) {}
 
-export class Downsized extends S.Class<Downsized>("Downsized")({
+export class The480_WStill extends S.Class<The480_WStill>("The480_WStill")({
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "url": S.String,
     "width": S.String.pipe(S.pattern(/^-?\d+$/)),
 }) {}
 
 export class Images extends S.Class<Images>("Images")({
-    "downsized": Downsized,
-    "downsized_large": Downsized,
-    "downsized_medium": Downsized,
+    "downsized": The480_WStill,
+    "downsized_large": The480_WStill,
+    "downsized_medium": The480_WStill,
     "downsized_small": DownsizedSmall,
-    "downsized_still": Downsized,
+    "downsized_still": The480_WStill,
     "fixed_height": FixedHeight,
     "fixed_height_downsampled": FixedHeight,
     "fixed_height_small": FixedHeight,
-    "fixed_height_small_still": Downsized,
-    "fixed_height_still": Downsized,
+    "fixed_height_small_still": The480_WStill,
+    "fixed_height_still": The480_WStill,
     "fixed_width": FixedHeight,
     "fixed_width_downsampled": FixedHeight,
     "fixed_width_small": FixedHeight,
-    "fixed_width_small_still": Downsized,
-    "fixed_width_still": Downsized,
-    "hd": S.optional(S.NullOr(DownsizedSmall)),
+    "fixed_width_small_still": The480_WStill,
+    "fixed_width_still": The480_WStill,
+    "hd": S.optional(DownsizedSmall),
     "looping": Looping,
     "original": FixedHeight,
     "original_mp4": DownsizedSmall,
-    "original_still": Downsized,
+    "original_still": The480_WStill,
     "preview": DownsizedSmall,
-    "preview_gif": Downsized,
-    "preview_webp": Downsized,
-    "480w_still": S.optional(S.NullOr(Downsized)),
+    "preview_gif": The480_WStill,
+    "preview_webp": The480_WStill,
+    "480w_still": S.optional(The480_WStill),
 }) {}
 
 export class Datum extends S.Class<Datum>("Datum")({
@@ -112,7 +112,7 @@ export class Datum extends S.Class<Datum>("Datum")({
     "trending_datetime": S.String,
     "type": Type,
     "url": S.String,
-    "user": S.optional(S.NullOr(User)),
+    "user": S.optional(User),
     "username": S.String,
 }) {}
 
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/26c9c.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/26c9c.json/default/TopLevel.ts
index b2a1206..7b46d6f 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/26c9c.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/26c9c.json/default/TopLevel.ts
@@ -105,10 +105,10 @@ export class Grant extends S.Class<Grant>("Grant")({
 }) {}
 
 export class Format extends S.Class<Format>("Format")({
-    "align": S.optional(S.NullOr(S.String)),
-    "noCommas": S.optional(S.NullOr(S.Literal("true", "false"))),
-    "precisionStyle": S.optional(S.NullOr(S.String)),
-    "view": S.optional(S.NullOr(S.String)),
+    "align": S.optional(S.String),
+    "noCommas": S.optional(S.Literal("true", "false")),
+    "precisionStyle": S.optional(S.String),
+    "view": S.optional(S.String),
 }) {}
 
 export class Top extends S.Class<Top>("Top")({
@@ -117,27 +117,27 @@ export class Top extends S.Class<Top>("Top")({
 }) {}
 
 export class CachedContents extends S.Class<CachedContents>("CachedContents")({
-    "average": S.optional(S.NullOr(S.String)),
+    "average": S.optional(S.String),
     "largest": S.String,
     "non_null": S.Int,
     "null": S.Int,
     "smallest": S.String,
-    "sum": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "sum": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "top": S.Array(Top),
 }) {}
 
 export class Column extends S.Class<Column>("Column")({
-    "cachedContents": S.optional(S.NullOr(CachedContents)),
+    "cachedContents": S.optional(CachedContents),
     "dataTypeName": S.String,
     "fieldName": S.String,
-    "flags": S.optional(S.NullOr(S.Array(S.String))),
+    "flags": S.optional(S.Array(S.String)),
     "format": Format,
     "id": S.Int,
     "name": S.String,
     "position": S.Int,
     "renderTypeName": S.String,
-    "tableColumnId": S.optional(S.NullOr(S.Int)),
-    "width": S.optional(S.NullOr(S.Int)),
+    "tableColumnId": S.optional(S.Int),
+    "width": S.optional(S.Int),
 }) {}
 
 export class View extends S.Class<View>("View")({
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/27332.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/27332.json/default/TopLevel.ts
index 1984589..dece151 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/27332.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/27332.json/default/TopLevel.ts
@@ -68,10 +68,10 @@ export class Preview extends S.Class<Preview>("Preview")({
 }) {}
 
 export class MediaEmbed extends S.Class<MediaEmbed>("MediaEmbed")({
-    "content": S.optional(S.NullOr(S.String)),
-    "height": S.optional(S.NullOr(S.Int)),
-    "scrolling": S.optional(S.NullOr(S.Boolean)),
-    "width": S.optional(S.NullOr(S.Int)),
+    "content": S.optional(S.String),
+    "height": S.optional(S.Int),
+    "scrolling": S.optional(S.Boolean),
+    "width": S.optional(S.Int),
 }) {}
 
 export class Oembed extends S.Class<Oembed>("Oembed")({
@@ -132,8 +132,8 @@ export class ChildData extends S.Class<ChildData>("ChildData")({
     "num_reports": S.Null,
     "over_18": S.Boolean,
     "permalink": S.String,
-    "post_hint": S.optional(S.NullOr(PostHint)),
-    "preview": S.optional(S.NullOr(Preview)),
+    "post_hint": S.optional(PostHint),
+    "preview": S.optional(Preview),
     "quarantine": S.Boolean,
     "removal_reason": S.Null,
     "report_reasons": S.Null,
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/29f47.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/29f47.json/default/TopLevel.ts
index 566c8e4..9317503 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/29f47.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/29f47.json/default/TopLevel.ts
@@ -50,11 +50,6 @@ export const Kind = S.Literal(
 );
 export type Kind = S.Schema.Type<typeof Kind>;
 
-export class Variants extends S.Class<Variants>("Variants")({
-    "gif": S.optional(S.NullOr(S.suspend(() => Gif))),
-    "mp4": S.optional(S.NullOr(S.suspend(() => Gif))),
-}) {}
-
 export class Source extends S.Class<Source>("Source")({
     "height": S.Int,
     "url": S.String,
@@ -65,7 +60,7 @@ export class Image extends S.Class<Image>("Image")({
     "id": S.String,
     "resolutions": S.Array(Source),
     "source": Source,
-    "variants": Variants,
+    "variants": S.suspend(() => Variants),
 }) {}
 
 export class Preview extends S.Class<Preview>("Preview")({
@@ -114,8 +109,8 @@ export class ChildData extends S.Class<ChildData>("ChildData")({
     "num_reports": S.Null,
     "over_18": S.Boolean,
     "permalink": S.String,
-    "post_hint": S.optional(S.NullOr(PostHint)),
-    "preview": S.optional(S.NullOr(Preview)),
+    "post_hint": S.optional(PostHint),
+    "preview": S.optional(Preview),
     "quarantine": S.Boolean,
     "removal_reason": S.Null,
     "report_reasons": S.Null,
@@ -155,12 +150,17 @@ export class TopLevelData extends S.Class<TopLevelData>("TopLevelData")({
     "modhash": S.String,
 }) {}
 
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "data": TopLevelData,
+    "kind": S.String,
+}) {}
+
 export class Gif extends S.Class<Gif>("Gif")({
     "resolutions": S.Array(Source),
     "source": Source,
 }) {}
 
-export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "data": TopLevelData,
-    "kind": S.String,
+export class Variants extends S.Class<Variants>("Variants")({
+    "gif": S.optional(Gif),
+    "mp4": S.optional(Gif),
 }) {}
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts
index 2ac50e2..adcadc0 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/2d4e2.json/default/TopLevel.ts
@@ -102,9 +102,9 @@ export class Person extends S.Class<Person>("Person")({
 export class Extra extends S.Class<Extra>("Extra")({
     "address": S.String,
     "contact_form": S.String,
-    "fax": S.optional(S.NullOr(S.String)),
+    "fax": S.optional(S.String),
     "office": S.String,
-    "rss_url": S.optional(S.NullOr(S.String)),
+    "rss_url": S.optional(S.String),
 }) {}
 
 export class ObjectElement extends S.Class<ObjectElement>("ObjectElement")({
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/31189.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/31189.json/default/TopLevel.ts
index 9c6cb6c..3a8eef8 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/31189.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/31189.json/default/TopLevel.ts
@@ -7,12 +7,12 @@ export const EffectiveFromEnum = S.Literal(
 export type EffectiveFromEnum = S.Schema.Type<typeof EffectiveFromEnum>;
 
 export class Rates extends S.Class<Rates>("Rates")({
-    "parking": S.optional(S.NullOr(S.Number)),
-    "reduced": S.optional(S.NullOr(S.Number)),
-    "reduced1": S.optional(S.NullOr(S.Number)),
-    "reduced2": S.optional(S.NullOr(S.Number)),
+    "parking": S.optional(S.Number),
+    "reduced": S.optional(S.Number),
+    "reduced1": S.optional(S.Number),
+    "reduced2": S.optional(S.Number),
     "standard": S.Number,
-    "super_reduced": S.optional(S.NullOr(S.Number)),
+    "super_reduced": S.optional(S.Number),
 }) {}
 
 export class Period extends S.Class<Period>("Period")({
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/33d2e.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/33d2e.json/default/TopLevel.ts
index 086434e..b2e54fe 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/33d2e.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/33d2e.json/default/TopLevel.ts
@@ -28,34 +28,34 @@ export const Category = S.Literal(
 export type Category = S.Schema.Type<typeof Category>;
 
 export class AffiliationClass extends S.Class<AffiliationClass>("AffiliationClass")({
-    "city": S.optional(S.NullOr(S.String)),
-    "country": S.optional(S.NullOr(S.String)),
-    "name": S.optional(S.NullOr(S.String)),
+    "city": S.optional(S.String),
+    "country": S.optional(S.String),
+    "name": S.optional(S.String),
 }) {}
 
 export class Prize extends S.Class<Prize>("Prize")({
     "affiliations": S.Array(S.Union(S.Array(S.Any), AffiliationClass)),
-    "category": S.optional(S.NullOr(Category)),
-    "motivation": S.optional(S.NullOr(S.String)),
-    "overallMotivation": S.optional(S.NullOr(S.String)),
-    "share": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
-    "year": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "category": S.optional(Category),
+    "motivation": S.optional(S.String),
+    "overallMotivation": S.optional(S.String),
+    "share": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
+    "year": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
 }) {}
 
 export class Laureate extends S.Class<Laureate>("Laureate")({
     "born": S.Union(S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)), BornEnum),
-    "bornCity": S.optional(S.NullOr(S.String)),
-    "bornCountry": S.optional(S.NullOr(S.String)),
-    "bornCountryCode": S.optional(S.NullOr(S.String)),
+    "bornCity": S.optional(S.String),
+    "bornCountry": S.optional(S.String),
+    "bornCountryCode": S.optional(S.String),
     "died": S.Union(S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}$/)), BornEnum),
-    "diedCity": S.optional(S.NullOr(S.String)),
-    "diedCountry": S.optional(S.NullOr(S.String)),
-    "diedCountryCode": S.optional(S.NullOr(S.String)),
-    "firstname": S.optional(S.NullOr(S.String)),
+    "diedCity": S.optional(S.String),
+    "diedCountry": S.optional(S.String),
+    "diedCountryCode": S.optional(S.String),
+    "firstname": S.optional(S.String),
     "gender": Gender,
     "id": S.String.pipe(S.pattern(/^-?\d+$/)),
     "prizes": S.Array(Prize),
-    "surname": S.optional(S.NullOr(S.String)),
+    "surname": S.optional(S.String),
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/3e9a3.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/3e9a3.json/default/TopLevel.ts
index 1bb3a07..defca9f 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/3e9a3.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/3e9a3.json/default/TopLevel.ts
@@ -2,8 +2,8 @@ import * as S from "effect/Schema";
 
 
 export class Footnote extends S.Class<Footnote>("Footnote")({
-    "code": S.optional(S.NullOr(S.String)),
-    "text": S.optional(S.NullOr(S.String)),
+    "code": S.optional(S.String),
+    "text": S.optional(S.String),
 }) {}
 
 export class Datum extends S.Class<Datum>("Datum")({
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/421d4.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/421d4.json/default/TopLevel.ts
index 5ee42ed..681b176 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/421d4.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/421d4.json/default/TopLevel.ts
@@ -42,27 +42,27 @@ export class Top extends S.Class<Top>("Top")({
 }) {}
 
 export class CachedContents extends S.Class<CachedContents>("CachedContents")({
-    "average": S.optional(S.NullOr(S.String)),
-    "largest": S.optional(S.NullOr(S.String)),
+    "average": S.optional(S.String),
+    "largest": S.optional(S.String),
     "non_null": S.Int,
     "null": S.Int,
-    "smallest": S.optional(S.NullOr(S.String)),
-    "sum": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
-    "top": S.optional(S.NullOr(S.Array(Top))),
+    "smallest": S.optional(S.String),
+    "sum": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
+    "top": S.optional(S.Array(Top)),
 }) {}
 
 export class Column extends S.Class<Column>("Column")({
-    "cachedContents": S.optional(S.NullOr(CachedContents)),
+    "cachedContents": S.optional(CachedContents),
     "dataTypeName": S.String,
     "fieldName": S.String,
-    "flags": S.optional(S.NullOr(S.Array(S.String))),
+    "flags": S.optional(S.Array(S.String)),
     "format": Query,
     "id": S.Int,
     "name": S.String,
     "position": S.Int,
     "renderTypeName": S.String,
-    "tableColumnId": S.optional(S.NullOr(S.Int)),
-    "width": S.optional(S.NullOr(S.Int)),
+    "tableColumnId": S.optional(S.Int),
+    "width": S.optional(S.Int),
 }) {}
 
 export class View extends S.Class<View>("View")({
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/437e7.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/437e7.json/default/TopLevel.ts
index ae50960..2a1aafb 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/437e7.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/437e7.json/default/TopLevel.ts
@@ -42,10 +42,10 @@ export class Looping extends S.Class<Looping>("Looping")({
 }) {}
 
 export class FixedHeight extends S.Class<FixedHeight>("FixedHeight")({
-    "frames": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "frames": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "mp4": S.optional(S.NullOr(S.String)),
-    "mp4_size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "mp4": S.optional(S.String),
+    "mp4_size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "size": S.String.pipe(S.pattern(/^-?\d+$/)),
     "url": S.String,
     "webp": S.String,
@@ -62,7 +62,7 @@ export class DownsizedSmall extends S.Class<DownsizedSmall>("DownsizedSmall")({
 
 export class Downsized extends S.Class<Downsized>("Downsized")({
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "url": S.String,
     "width": S.String.pipe(S.pattern(/^-?\d+$/)),
 }) {}
@@ -109,7 +109,7 @@ export class Datum extends S.Class<Datum>("Datum")({
     "trending_datetime": S.String,
     "type": Type,
     "url": S.String,
-    "user": S.optional(S.NullOr(User)),
+    "user": S.optional(User),
     "username": S.String,
 }) {}
 
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/4d6fb.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/4d6fb.json/default/TopLevel.ts
index aca51d9..bd39ee5 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/4d6fb.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/4d6fb.json/default/TopLevel.ts
@@ -59,10 +59,10 @@ export class Preview extends S.Class<Preview>("Preview")({
 }) {}
 
 export class MediaEmbed extends S.Class<MediaEmbed>("MediaEmbed")({
-    "content": S.optional(S.NullOr(S.String)),
-    "height": S.optional(S.NullOr(S.Int)),
-    "scrolling": S.optional(S.NullOr(S.Boolean)),
-    "width": S.optional(S.NullOr(S.Int)),
+    "content": S.optional(S.String),
+    "height": S.optional(S.Int),
+    "scrolling": S.optional(S.Boolean),
+    "width": S.optional(S.Int),
 }) {}
 
 export class Oembed extends S.Class<Oembed>("Oembed")({
@@ -124,8 +124,8 @@ export class ChildData extends S.Class<ChildData>("ChildData")({
     "num_reports": S.Null,
     "over_18": S.Boolean,
     "permalink": S.String,
-    "post_hint": S.optional(S.NullOr(PostHint)),
-    "preview": S.optional(S.NullOr(Preview)),
+    "post_hint": S.optional(PostHint),
+    "preview": S.optional(Preview),
     "quarantine": S.Boolean,
     "removal_reason": S.Null,
     "report_reasons": S.Null,
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/5f7fe.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/5f7fe.json/default/TopLevel.ts
index ad557d5..a3aaab7 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/5f7fe.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/5f7fe.json/default/TopLevel.ts
@@ -112,8 +112,8 @@ export class Grant extends S.Class<Grant>("Grant")({
 }) {}
 
 export class Format extends S.Class<Format>("Format")({
-    "align": S.optional(S.NullOr(S.String)),
-    "view": S.optional(S.NullOr(S.String)),
+    "align": S.optional(S.String),
+    "view": S.optional(S.String),
 }) {}
 
 export class Top extends S.Class<Top>("Top")({
@@ -130,17 +130,17 @@ export class CachedContents extends S.Class<CachedContents>("CachedContents")({
 }) {}
 
 export class Column extends S.Class<Column>("Column")({
-    "cachedContents": S.optional(S.NullOr(CachedContents)),
+    "cachedContents": S.optional(CachedContents),
     "dataTypeName": TypeName,
     "fieldName": S.String,
-    "flags": S.optional(S.NullOr(S.Array(S.String))),
+    "flags": S.optional(S.Array(S.String)),
     "format": Format,
     "id": S.Int,
     "name": S.String,
     "position": S.Int,
     "renderTypeName": TypeName,
-    "tableColumnId": S.optional(S.NullOr(S.Int)),
-    "width": S.optional(S.NullOr(S.Int)),
+    "tableColumnId": S.optional(S.Int),
+    "width": S.optional(S.Int),
 }) {}
 
 export class View extends S.Class<View>("View")({
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/617e8.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/617e8.json/default/TopLevel.ts
index df31594..9be5169 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/617e8.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/617e8.json/default/TopLevel.ts
@@ -110,8 +110,8 @@ export class Grant extends S.Class<Grant>("Grant")({
 }) {}
 
 export class Format extends S.Class<Format>("Format")({
-    "align": S.optional(S.NullOr(S.String)),
-    "view": S.optional(S.NullOr(S.String)),
+    "align": S.optional(S.String),
+    "view": S.optional(S.String),
 }) {}
 
 export class Top extends S.Class<Top>("Top")({
@@ -128,18 +128,18 @@ export class CachedContents extends S.Class<CachedContents>("CachedContents")({
 }) {}
 
 export class Column extends S.Class<Column>("Column")({
-    "cachedContents": S.optional(S.NullOr(CachedContents)),
+    "cachedContents": S.optional(CachedContents),
     "dataTypeName": TypeName,
-    "description": S.optional(S.NullOr(S.String)),
+    "description": S.optional(S.String),
     "fieldName": S.String,
-    "flags": S.optional(S.NullOr(S.Array(S.String))),
+    "flags": S.optional(S.Array(S.String)),
     "format": Format,
     "id": S.Int,
     "name": S.String,
     "position": S.Int,
     "renderTypeName": TypeName,
-    "tableColumnId": S.optional(S.NullOr(S.Int)),
-    "width": S.optional(S.NullOr(S.Int)),
+    "tableColumnId": S.optional(S.Int),
+    "width": S.optional(S.Int),
 }) {}
 
 export class View extends S.Class<View>("View")({
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/65dec.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/65dec.json/default/TopLevel.ts
index 910e76a..772d822 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/65dec.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/65dec.json/default/TopLevel.ts
@@ -67,32 +67,32 @@ export class LegalityElement extends S.Class<LegalityElement>("LegalityElement")
 export class Card extends S.Class<Card>("Card")({
     "artist": S.String,
     "cmc": S.Int,
-    "colorIdentity": S.optional(S.NullOr(S.Array(ColorIdentity))),
-    "colors": S.optional(S.NullOr(S.Array(Watermark))),
-    "flavor": S.optional(S.NullOr(S.String)),
+    "colorIdentity": S.optional(S.Array(ColorIdentity)),
+    "colors": S.optional(S.Array(Watermark)),
+    "flavor": S.optional(S.String),
     "id": S.String,
     "imageName": S.String,
     "layout": Layout,
     "legalities": S.Array(LegalityElement),
-    "manaCost": S.optional(S.NullOr(S.String)),
-    "mciNumber": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "manaCost": S.optional(S.String),
+    "mciNumber": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "multiverseid": S.Int,
     "name": S.String,
     "originalText": S.String,
     "originalType": S.String,
-    "power": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "power": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "printings": S.Array(S.String),
     "rarity": Rarity,
-    "reserved": S.optional(S.NullOr(S.Boolean)),
-    "rulings": S.optional(S.NullOr(S.Array(Ruling))),
-    "subtypes": S.optional(S.NullOr(S.Array(S.String))),
-    "supertypes": S.optional(S.NullOr(S.Array(S.String))),
-    "text": S.optional(S.NullOr(S.String)),
-    "toughness": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "reserved": S.optional(S.Boolean),
+    "rulings": S.optional(S.Array(Ruling)),
+    "subtypes": S.optional(S.Array(S.String)),
+    "supertypes": S.optional(S.Array(S.String)),
+    "text": S.optional(S.String),
+    "toughness": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "type": S.String,
     "types": S.Array(Type),
-    "variations": S.optional(S.NullOr(S.Array(S.Int))),
-    "watermark": S.optional(S.NullOr(Watermark)),
+    "variations": S.optional(S.Array(S.Int)),
+    "watermark": S.optional(Watermark),
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/6de06.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/6de06.json/default/TopLevel.ts
index dfd32af..3535ce7 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/6de06.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/6de06.json/default/TopLevel.ts
@@ -20,13 +20,6 @@ export const Kind = S.Literal(
 );
 export type Kind = S.Schema.Type<typeof Kind>;
 
-export class Variants extends S.Class<Variants>("Variants")({
-    "gif": S.optional(S.NullOr(S.suspend(() => Gif))),
-    "mp4": S.optional(S.NullOr(S.suspend(() => Gif))),
-    "nsfw": S.optional(S.NullOr(S.suspend(() => Gif))),
-    "obfuscated": S.optional(S.NullOr(S.suspend(() => Gif))),
-}) {}
-
 export class Source extends S.Class<Source>("Source")({
     "height": S.Int,
     "url": S.String,
@@ -37,7 +30,7 @@ export class Image extends S.Class<Image>("Image")({
     "id": S.String,
     "resolutions": S.Array(Source),
     "source": Source,
-    "variants": Variants,
+    "variants": S.suspend(() => Variants),
 }) {}
 
 export class Preview extends S.Class<Preview>("Preview")({
@@ -46,10 +39,10 @@ export class Preview extends S.Class<Preview>("Preview")({
 }) {}
 
 export class MediaEmbed extends S.Class<MediaEmbed>("MediaEmbed")({
-    "content": S.optional(S.NullOr(S.String)),
-    "height": S.optional(S.NullOr(S.Int)),
-    "scrolling": S.optional(S.NullOr(S.Boolean)),
-    "width": S.optional(S.NullOr(S.Int)),
+    "content": S.optional(S.String),
+    "height": S.optional(S.Int),
+    "scrolling": S.optional(S.Boolean),
+    "width": S.optional(S.Int),
 }) {}
 
 export class Oembed extends S.Class<Oembed>("Oembed")({
@@ -110,8 +103,8 @@ export class ChildData extends S.Class<ChildData>("ChildData")({
     "num_reports": S.Null,
     "over_18": S.Boolean,
     "permalink": S.String,
-    "post_hint": S.optional(S.NullOr(PostHint)),
-    "preview": S.optional(S.NullOr(Preview)),
+    "post_hint": S.optional(PostHint),
+    "preview": S.optional(Preview),
     "quarantine": S.Boolean,
     "removal_reason": S.Null,
     "report_reasons": S.Null,
@@ -151,12 +144,19 @@ export class TopLevelData extends S.Class<TopLevelData>("TopLevelData")({
     "modhash": S.String,
 }) {}
 
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "data": TopLevelData,
+    "kind": S.String,
+}) {}
+
 export class Gif extends S.Class<Gif>("Gif")({
     "resolutions": S.Array(Source),
     "source": Source,
 }) {}
 
-export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "data": TopLevelData,
-    "kind": S.String,
+export class Variants extends S.Class<Variants>("Variants")({
+    "gif": S.optional(Gif),
+    "mp4": S.optional(Gif),
+    "nsfw": S.optional(Gif),
+    "obfuscated": S.optional(Gif),
 }) {}
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/734ad.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/734ad.json/default/TopLevel.ts
index 5729e2d..9562562 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/734ad.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/734ad.json/default/TopLevel.ts
@@ -17,14 +17,14 @@ export class Result extends S.Class<Result>("Result")({
     "activity_inter_groups": S.String,
     "activity_other": S.NullOr(S.String),
     "activity_relevant_comm": S.String,
-    "be_office_country": S.optional(S.NullOr(S.String)),
+    "be_office_country": S.optional(S.String),
     "be_office_lat": S.optional(S.NullOr(S.Number)),
     "be_office_lon": S.optional(S.NullOr(S.Number)),
-    "be_office_phone": S.optional(S.NullOr(S.String)),
+    "be_office_phone": S.optional(S.String),
     "be_office_post_code": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
     "be_office_postbox": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
-    "be_office_street": S.optional(S.NullOr(S.String)),
-    "be_office_town": S.optional(S.NullOr(S.String)),
+    "be_office_street": S.optional(S.String),
+    "be_office_town": S.optional(S.String),
     "code_of_conduct": S.String,
     "contact_country": S.Int,
     "created_at": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)),
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/7681c.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/7681c.json/default/TopLevel.ts
index 70acb4e..923390f 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/7681c.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/7681c.json/default/TopLevel.ts
@@ -40,7 +40,7 @@ export class User extends S.Class<User>("User")({
     "banner_url": S.String,
     "display_name": S.String,
     "profile_url": S.String,
-    "twitter": S.optional(S.NullOr(S.String)),
+    "twitter": S.optional(S.String),
     "username": S.String,
 }) {}
 
@@ -50,11 +50,11 @@ export class Looping extends S.Class<Looping>("Looping")({
 }) {}
 
 export class FixedHeight extends S.Class<FixedHeight>("FixedHeight")({
-    "frames": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
-    "hash": S.optional(S.NullOr(S.String)),
+    "frames": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
+    "hash": S.optional(S.String),
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "mp4": S.optional(S.NullOr(S.String)),
-    "mp4_size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "mp4": S.optional(S.String),
+    "mp4_size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "size": S.String.pipe(S.pattern(/^-?\d+$/)),
     "url": S.String,
     "webp": S.String,
@@ -69,37 +69,37 @@ export class DownsizedSmall extends S.Class<DownsizedSmall>("DownsizedSmall")({
     "width": S.String.pipe(S.pattern(/^-?\d+$/)),
 }) {}
 
-export class Downsized extends S.Class<Downsized>("Downsized")({
+export class The480_WStill extends S.Class<The480_WStill>("The480_WStill")({
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "url": S.String,
     "width": S.String.pipe(S.pattern(/^-?\d+$/)),
 }) {}
 
 export class Images extends S.Class<Images>("Images")({
-    "downsized": Downsized,
-    "downsized_large": Downsized,
-    "downsized_medium": Downsized,
+    "downsized": The480_WStill,
+    "downsized_large": The480_WStill,
+    "downsized_medium": The480_WStill,
     "downsized_small": DownsizedSmall,
-    "downsized_still": Downsized,
+    "downsized_still": The480_WStill,
     "fixed_height": FixedHeight,
     "fixed_height_downsampled": FixedHeight,
     "fixed_height_small": FixedHeight,
-    "fixed_height_small_still": Downsized,
-    "fixed_height_still": Downsized,
+    "fixed_height_small_still": The480_WStill,
+    "fixed_height_still": The480_WStill,
     "fixed_width": FixedHeight,
     "fixed_width_downsampled": FixedHeight,
     "fixed_width_small": FixedHeight,
-    "fixed_width_small_still": Downsized,
-    "fixed_width_still": Downsized,
+    "fixed_width_small_still": The480_WStill,
+    "fixed_width_still": The480_WStill,
     "looping": Looping,
     "original": FixedHeight,
     "original_mp4": DownsizedSmall,
-    "original_still": Downsized,
+    "original_still": The480_WStill,
     "preview": DownsizedSmall,
-    "preview_gif": Downsized,
-    "preview_webp": Downsized,
-    "480w_still": S.optional(S.NullOr(Downsized)),
+    "preview_gif": The480_WStill,
+    "preview_webp": The480_WStill,
+    "480w_still": S.optional(The480_WStill),
 }) {}
 
 export class Datum extends S.Class<Datum>("Datum")({
@@ -119,7 +119,7 @@ export class Datum extends S.Class<Datum>("Datum")({
     "trending_datetime": S.String,
     "type": Type,
     "url": S.String,
-    "user": S.optional(S.NullOr(User)),
+    "user": S.optional(User),
     "username": Username,
 }) {}
 
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/77392.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/77392.json/default/TopLevel.ts
index b72380d..f972c47 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/77392.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/77392.json/default/TopLevel.ts
@@ -25,14 +25,14 @@ export type Pha = S.Schema.Type<typeof Pha>;
 export class TopLevelElement extends S.Class<TopLevelElement>("TopLevelElement")({
     "designation": S.String,
     "discovery_date": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)),
-    "h_mag": S.optional(S.NullOr(S.String)),
+    "h_mag": S.optional(S.String),
     "i_deg": S.String,
     "moid_au": S.String,
     "orbit_class": OrbitClass,
-    "period_yr": S.optional(S.NullOr(S.String)),
+    "period_yr": S.optional(S.String),
     "pha": Pha,
     "q_au_1": S.String,
-    "q_au_2": S.optional(S.NullOr(S.String)),
+    "q_au_2": S.optional(S.String),
 }) {}
 
 export const TopLevel = S.Array(TopLevelElement);
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/8592b.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/8592b.json/default/TopLevel.ts
index 21d937a..e0e72c1 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/8592b.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/8592b.json/default/TopLevel.ts
@@ -90,8 +90,8 @@ export class ChildData extends S.Class<ChildData>("ChildData")({
     "num_reports": S.Null,
     "over_18": S.Boolean,
     "permalink": S.String,
-    "post_hint": S.optional(S.NullOr(PostHint)),
-    "preview": S.optional(S.NullOr(S.suspend(() => Preview))),
+    "post_hint": S.optional(PostHint),
+    "preview": S.optional(S.suspend(() => Preview)),
     "quarantine": S.Boolean,
     "removal_reason": S.Null,
     "report_reasons": S.Null,
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/a3d8c.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/a3d8c.json/default/TopLevel.ts
index 7a42f45..7e9af8d 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/a3d8c.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/a3d8c.json/default/TopLevel.ts
@@ -49,27 +49,27 @@ export class Top extends S.Class<Top>("Top")({
 }) {}
 
 export class CachedContents extends S.Class<CachedContents>("CachedContents")({
-    "average": S.optional(S.NullOr(S.String)),
+    "average": S.optional(S.String),
     "largest": S.String,
     "non_null": S.Int,
     "null": S.Int,
     "smallest": S.String,
-    "sum": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "sum": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "top": S.Array(Top),
 }) {}
 
 export class Column extends S.Class<Column>("Column")({
-    "cachedContents": S.optional(S.NullOr(CachedContents)),
+    "cachedContents": S.optional(CachedContents),
     "dataTypeName": TypeName,
     "fieldName": S.String,
-    "flags": S.optional(S.NullOr(S.Array(S.String))),
+    "flags": S.optional(S.Array(S.String)),
     "format": Query,
     "id": S.Int,
     "name": S.String,
     "position": S.Int,
     "renderTypeName": TypeName,
-    "tableColumnId": S.optional(S.NullOr(S.Int)),
-    "width": S.optional(S.NullOr(S.Int)),
+    "tableColumnId": S.optional(S.Int),
+    "width": S.optional(S.Int),
 }) {}
 
 export class View extends S.Class<View>("View")({
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/b4865.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/b4865.json/default/TopLevel.ts
index 9e77a14..f6a3af2 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/b4865.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/b4865.json/default/TopLevel.ts
@@ -25,18 +25,18 @@ export class Geolocation extends S.Class<Geolocation>("Geolocation")({
 }) {}
 
 export class TopLevelElement extends S.Class<TopLevelElement>("TopLevelElement")({
-    ":@computed_region_cbhk_fwbd": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
-    ":@computed_region_nnqa_25f4": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    ":@computed_region_cbhk_fwbd": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
+    ":@computed_region_nnqa_25f4": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "fall": Fall,
-    "geolocation": S.optional(S.NullOr(Geolocation)),
+    "geolocation": S.optional(Geolocation),
     "id": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "mass": S.optional(S.NullOr(S.String)),
+    "mass": S.optional(S.String),
     "name": S.String,
     "nametype": Nametype,
     "recclass": S.String,
-    "reclat": S.optional(S.NullOr(S.String)),
-    "reclong": S.optional(S.NullOr(S.String)),
-    "year": S.optional(S.NullOr(S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)))),
+    "reclat": S.optional(S.String),
+    "reclong": S.optional(S.String),
+    "year": S.optional(S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/))),
 }) {}
 
 export const TopLevel = S.Array(TopLevelElement);
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/be234.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/be234.json/default/TopLevel.ts
index 9bfa715..554226a 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/be234.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/be234.json/default/TopLevel.ts
@@ -48,11 +48,6 @@ export const Kind = S.Literal(
 );
 export type Kind = S.Schema.Type<typeof Kind>;
 
-export class Variants extends S.Class<Variants>("Variants")({
-    "gif": S.optional(S.NullOr(S.suspend(() => Gif))),
-    "mp4": S.optional(S.NullOr(S.suspend(() => Gif))),
-}) {}
-
 export class Source extends S.Class<Source>("Source")({
     "height": S.Int,
     "url": S.String,
@@ -63,7 +58,7 @@ export class Image extends S.Class<Image>("Image")({
     "id": S.String,
     "resolutions": S.Array(Source),
     "source": Source,
-    "variants": Variants,
+    "variants": S.suspend(() => Variants),
 }) {}
 
 export class Preview extends S.Class<Preview>("Preview")({
@@ -72,10 +67,10 @@ export class Preview extends S.Class<Preview>("Preview")({
 }) {}
 
 export class MediaEmbed extends S.Class<MediaEmbed>("MediaEmbed")({
-    "content": S.optional(S.NullOr(S.String)),
-    "height": S.optional(S.NullOr(S.Int)),
-    "scrolling": S.optional(S.NullOr(S.Boolean)),
-    "width": S.optional(S.NullOr(S.Int)),
+    "content": S.optional(S.String),
+    "height": S.optional(S.Int),
+    "scrolling": S.optional(S.Boolean),
+    "width": S.optional(S.Int),
 }) {}
 
 export class Oembed extends S.Class<Oembed>("Oembed")({
@@ -177,12 +172,17 @@ export class TopLevelData extends S.Class<TopLevelData>("TopLevelData")({
     "modhash": S.String,
 }) {}
 
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "data": TopLevelData,
+    "kind": S.String,
+}) {}
+
 export class Gif extends S.Class<Gif>("Gif")({
     "resolutions": S.Array(Source),
     "source": Source,
 }) {}
 
-export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "data": TopLevelData,
-    "kind": S.String,
+export class Variants extends S.Class<Variants>("Variants")({
+    "gif": S.optional(Gif),
+    "mp4": S.optional(Gif),
 }) {}
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/c3303.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/c3303.json/default/TopLevel.ts
index 92623fa..aaa8d57 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/c3303.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/c3303.json/default/TopLevel.ts
@@ -47,11 +47,11 @@ export class Looping extends S.Class<Looping>("Looping")({
 }) {}
 
 export class FixedHeight extends S.Class<FixedHeight>("FixedHeight")({
-    "frames": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
-    "hash": S.optional(S.NullOr(S.String)),
+    "frames": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
+    "hash": S.optional(S.String),
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "mp4": S.optional(S.NullOr(S.String)),
-    "mp4_size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "mp4": S.optional(S.String),
+    "mp4_size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "size": S.String.pipe(S.pattern(/^-?\d+$/)),
     "url": S.String,
     "webp": S.String,
@@ -66,37 +66,37 @@ export class DownsizedSmall extends S.Class<DownsizedSmall>("DownsizedSmall")({
     "width": S.String.pipe(S.pattern(/^-?\d+$/)),
 }) {}
 
-export class Downsized extends S.Class<Downsized>("Downsized")({
+export class The480_WStill extends S.Class<The480_WStill>("The480_WStill")({
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "url": S.String,
     "width": S.String.pipe(S.pattern(/^-?\d+$/)),
 }) {}
 
 export class Images extends S.Class<Images>("Images")({
-    "downsized": Downsized,
-    "downsized_large": Downsized,
-    "downsized_medium": Downsized,
+    "downsized": The480_WStill,
+    "downsized_large": The480_WStill,
+    "downsized_medium": The480_WStill,
     "downsized_small": DownsizedSmall,
-    "downsized_still": Downsized,
+    "downsized_still": The480_WStill,
     "fixed_height": FixedHeight,
     "fixed_height_downsampled": FixedHeight,
     "fixed_height_small": FixedHeight,
-    "fixed_height_small_still": Downsized,
-    "fixed_height_still": Downsized,
+    "fixed_height_small_still": The480_WStill,
+    "fixed_height_still": The480_WStill,
     "fixed_width": FixedHeight,
     "fixed_width_downsampled": FixedHeight,
     "fixed_width_small": FixedHeight,
-    "fixed_width_small_still": Downsized,
-    "fixed_width_still": Downsized,
+    "fixed_width_small_still": The480_WStill,
+    "fixed_width_still": The480_WStill,
     "looping": Looping,
     "original": FixedHeight,
     "original_mp4": DownsizedSmall,
-    "original_still": Downsized,
+    "original_still": The480_WStill,
     "preview": DownsizedSmall,
-    "preview_gif": Downsized,
-    "preview_webp": Downsized,
-    "480w_still": S.optional(S.NullOr(Downsized)),
+    "preview_gif": The480_WStill,
+    "preview_webp": The480_WStill,
+    "480w_still": S.optional(The480_WStill),
 }) {}
 
 export class Datum extends S.Class<Datum>("Datum")({
@@ -116,7 +116,7 @@ export class Datum extends S.Class<Datum>("Datum")({
     "trending_datetime": S.String,
     "type": Type,
     "url": S.String,
-    "user": S.optional(S.NullOr(User)),
+    "user": S.optional(User),
     "username": Username,
 }) {}
 
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/cb0cc.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/cb0cc.json/default/TopLevel.ts
index 3c4c0ec..8a522cd 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/cb0cc.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/cb0cc.json/default/TopLevel.ts
@@ -14,7 +14,7 @@ export type Category = S.Schema.Type<typeof Category>;
 export class Laureate extends S.Class<Laureate>("Laureate")({
     "firstname": S.String,
     "id": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "motivation": S.optional(S.NullOr(S.String)),
+    "motivation": S.optional(S.String),
     "share": S.String.pipe(S.pattern(/^-?\d+$/)),
     "surname": S.String,
 }) {}
@@ -22,7 +22,7 @@ export class Laureate extends S.Class<Laureate>("Laureate")({
 export class Prize extends S.Class<Prize>("Prize")({
     "category": Category,
     "laureates": S.Array(Laureate),
-    "overallMotivation": S.optional(S.NullOr(S.String)),
+    "overallMotivation": S.optional(S.String),
     "year": S.String.pipe(S.pattern(/^-?\d+$/)),
 }) {}
 
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/dc44f.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/dc44f.json/default/TopLevel.ts
index 1be1a84..9dc093b 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/dc44f.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/dc44f.json/default/TopLevel.ts
@@ -116,31 +116,31 @@ export class LegalityElement extends S.Class<LegalityElement>("LegalityElement")
 export class Card extends S.Class<Card>("Card")({
     "artist": S.String,
     "cmc": S.Int,
-    "colorIdentity": S.optional(S.NullOr(S.Array(ColorIdentity))),
-    "colors": S.optional(S.NullOr(S.Array(Color))),
-    "flavor": S.optional(S.NullOr(S.String)),
+    "colorIdentity": S.optional(S.Array(ColorIdentity)),
+    "colors": S.optional(S.Array(Color)),
+    "flavor": S.optional(S.String),
     "id": S.String,
     "imageName": S.String,
     "layout": Layout,
     "legalities": S.Array(LegalityElement),
-    "manaCost": S.optional(S.NullOr(S.String)),
-    "mciNumber": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "manaCost": S.optional(S.String),
+    "mciNumber": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "multiverseid": S.Int,
     "name": S.String,
-    "originalText": S.optional(S.NullOr(S.String)),
+    "originalText": S.optional(S.String),
     "originalType": S.String,
-    "power": S.optional(S.NullOr(S.String)),
+    "power": S.optional(S.String),
     "printings": S.Array(S.String),
     "rarity": Rarity,
-    "reserved": S.optional(S.NullOr(S.Boolean)),
-    "rulings": S.optional(S.NullOr(S.Array(Ruling))),
-    "subtypes": S.optional(S.NullOr(S.Array(S.String))),
-    "supertypes": S.optional(S.NullOr(S.Array(Supertype))),
-    "text": S.optional(S.NullOr(S.String)),
-    "toughness": S.optional(S.NullOr(S.String)),
+    "reserved": S.optional(S.Boolean),
+    "rulings": S.optional(S.Array(Ruling)),
+    "subtypes": S.optional(S.Array(S.String)),
+    "supertypes": S.optional(S.Array(Supertype)),
+    "text": S.optional(S.String),
+    "toughness": S.optional(S.String),
     "type": S.String,
     "types": S.Array(Type),
-    "variations": S.optional(S.NullOr(S.Array(S.Int))),
+    "variations": S.optional(S.Array(S.Int)),
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts
index 1be1a84..9dc093b 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/dd1ce.json/default/TopLevel.ts
@@ -116,31 +116,31 @@ export class LegalityElement extends S.Class<LegalityElement>("LegalityElement")
 export class Card extends S.Class<Card>("Card")({
     "artist": S.String,
     "cmc": S.Int,
-    "colorIdentity": S.optional(S.NullOr(S.Array(ColorIdentity))),
-    "colors": S.optional(S.NullOr(S.Array(Color))),
-    "flavor": S.optional(S.NullOr(S.String)),
+    "colorIdentity": S.optional(S.Array(ColorIdentity)),
+    "colors": S.optional(S.Array(Color)),
+    "flavor": S.optional(S.String),
     "id": S.String,
     "imageName": S.String,
     "layout": Layout,
     "legalities": S.Array(LegalityElement),
-    "manaCost": S.optional(S.NullOr(S.String)),
-    "mciNumber": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "manaCost": S.optional(S.String),
+    "mciNumber": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "multiverseid": S.Int,
     "name": S.String,
-    "originalText": S.optional(S.NullOr(S.String)),
+    "originalText": S.optional(S.String),
     "originalType": S.String,
-    "power": S.optional(S.NullOr(S.String)),
+    "power": S.optional(S.String),
     "printings": S.Array(S.String),
     "rarity": Rarity,
-    "reserved": S.optional(S.NullOr(S.Boolean)),
-    "rulings": S.optional(S.NullOr(S.Array(Ruling))),
-    "subtypes": S.optional(S.NullOr(S.Array(S.String))),
-    "supertypes": S.optional(S.NullOr(S.Array(Supertype))),
-    "text": S.optional(S.NullOr(S.String)),
-    "toughness": S.optional(S.NullOr(S.String)),
+    "reserved": S.optional(S.Boolean),
+    "rulings": S.optional(S.Array(Ruling)),
+    "subtypes": S.optional(S.Array(S.String)),
+    "supertypes": S.optional(S.Array(Supertype)),
+    "text": S.optional(S.String),
+    "toughness": S.optional(S.String),
     "type": S.String,
     "types": S.Array(Type),
-    "variations": S.optional(S.NullOr(S.Array(S.Int))),
+    "variations": S.optional(S.Array(S.Int)),
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/e0ac7.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/e0ac7.json/default/TopLevel.ts
index 00d7935..5c12620 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/e0ac7.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/e0ac7.json/default/TopLevel.ts
@@ -41,11 +41,11 @@ export class Looping extends S.Class<Looping>("Looping")({
 }) {}
 
 export class FixedHeight extends S.Class<FixedHeight>("FixedHeight")({
-    "frames": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
-    "hash": S.optional(S.NullOr(S.String)),
+    "frames": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
+    "hash": S.optional(S.String),
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "mp4": S.optional(S.NullOr(S.String)),
-    "mp4_size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "mp4": S.optional(S.String),
+    "mp4_size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "size": S.String.pipe(S.pattern(/^-?\d+$/)),
     "url": S.String,
     "webp": S.String,
@@ -62,7 +62,7 @@ export class DownsizedSmall extends S.Class<DownsizedSmall>("DownsizedSmall")({
 
 export class Downsized extends S.Class<Downsized>("Downsized")({
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "url": S.String,
     "width": S.String.pipe(S.pattern(/^-?\d+$/)),
 }) {}
@@ -83,7 +83,7 @@ export class Images extends S.Class<Images>("Images")({
     "fixed_width_small": FixedHeight,
     "fixed_width_small_still": Downsized,
     "fixed_width_still": Downsized,
-    "hd": S.optional(S.NullOr(DownsizedSmall)),
+    "hd": S.optional(DownsizedSmall),
     "looping": Looping,
     "original": FixedHeight,
     "original_mp4": DownsizedSmall,
@@ -110,7 +110,7 @@ export class Datum extends S.Class<Datum>("Datum")({
     "trending_datetime": S.String,
     "type": Type,
     "url": S.String,
-    "user": S.optional(S.NullOr(User)),
+    "user": S.optional(User),
     "username": S.String,
 }) {}
 
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/e8b04.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/e8b04.json/default/TopLevel.ts
index d35c314..fc11757 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/e8b04.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/e8b04.json/default/TopLevel.ts
@@ -132,8 +132,8 @@ export type ViewType = S.Schema.Type<typeof ViewType>;
 export class TableAuthor extends S.Class<TableAuthor>("TableAuthor")({
     "displayName": S.String,
     "id": S.String,
-    "rights": S.optional(S.NullOr(S.Array(S.String))),
-    "roleName": S.optional(S.NullOr(RoleName)),
+    "rights": S.optional(S.Array(S.String)),
+    "roleName": S.optional(RoleName),
     "screenName": S.String,
 }) {}
 
@@ -143,14 +143,14 @@ export class Ratings extends S.Class<Ratings>("Ratings")({
 
 export class Owner extends S.Class<Owner>("Owner")({
     "displayName": S.String,
-    "flags": S.optional(S.NullOr(S.Array(S.String))),
+    "flags": S.optional(S.Array(S.String)),
     "id": S.String,
-    "lastNotificationSeenAt": S.optional(S.NullOr(S.Int)),
-    "profileImageUrlLarge": S.optional(S.NullOr(S.String)),
-    "profileImageUrlMedium": S.optional(S.NullOr(S.String)),
-    "profileImageUrlSmall": S.optional(S.NullOr(S.String)),
-    "rights": S.optional(S.NullOr(S.Array(S.String))),
-    "roleName": S.optional(S.NullOr(RoleName)),
+    "lastNotificationSeenAt": S.optional(S.Int),
+    "profileImageUrlLarge": S.optional(S.String),
+    "profileImageUrlMedium": S.optional(S.String),
+    "profileImageUrlSmall": S.optional(S.String),
+    "rights": S.optional(S.Array(S.String)),
+    "roleName": S.optional(RoleName),
     "screenName": S.String,
 }) {}
 
@@ -199,8 +199,8 @@ export class RichRendererConfigs extends S.Class<RichRendererConfigs>("RichRende
 }) {}
 
 export class PurpleVisible extends S.Class<PurpleVisible>("PurpleVisible")({
-    "fatrow": S.optional(S.NullOr(S.Boolean)),
-    "table": S.optional(S.NullOr(S.Boolean)),
+    "fatrow": S.optional(S.Boolean),
+    "table": S.optional(S.Boolean),
 }) {}
 
 export class MetadataRenderTypeConfig extends S.Class<MetadataRenderTypeConfig>("MetadataRenderTypeConfig")({
@@ -212,31 +212,31 @@ export class TableColumnId extends S.Class<TableColumnId>("TableColumnId")({
 }) {}
 
 export class ChildMetadata extends S.Class<ChildMetadata>("ChildMetadata")({
-    "customValues": S.optional(S.NullOr(S.Array(S.String))),
-    "freeform": S.optional(S.NullOr(S.Boolean)),
-    "includeAuto": S.optional(S.NullOr(S.Int)),
-    "operator": S.optional(S.NullOr(MetadataOperator)),
-    "tableColumnId": S.optional(S.NullOr(TableColumnId)),
-    "unifiedVersion": S.optional(S.NullOr(S.Int)),
+    "customValues": S.optional(S.Array(S.String)),
+    "freeform": S.optional(S.Boolean),
+    "includeAuto": S.optional(S.Int),
+    "operator": S.optional(MetadataOperator),
+    "tableColumnId": S.optional(TableColumnId),
+    "unifiedVersion": S.optional(S.Int),
 }) {}
 
 export class Child extends S.Class<Child>("Child")({
     "columnFieldName": ChildColumnFieldName,
-    "metadata": S.optional(S.NullOr(ChildMetadata)),
+    "metadata": S.optional(ChildMetadata),
     "operator": ChildOperator,
-    "value": S.optional(S.NullOr(S.String)),
+    "value": S.optional(S.String),
 }) {}
 
 export class Where extends S.Class<Where>("Where")({
-    "children": S.optional(S.NullOr(S.Array(Child))),
-    "columnFieldName": S.optional(S.NullOr(ChildColumnFieldName)),
-    "metadata": S.optional(S.NullOr(ChildMetadata)),
+    "children": S.optional(S.Array(Child)),
+    "columnFieldName": S.optional(ChildColumnFieldName),
+    "metadata": S.optional(ChildMetadata),
     "operator": WhereOperator,
-    "value": S.optional(S.NullOr(S.String)),
+    "value": S.optional(S.String),
 }) {}
 
 export class Select extends S.Class<Select>("Select")({
-    "aggregate": S.optional(S.NullOr(S.String)),
+    "aggregate": S.optional(S.String),
     "columnFieldName": S.String,
 }) {}
 
@@ -250,10 +250,10 @@ export class Group extends S.Class<Group>("Group")({
 }) {}
 
 export class JsonQuery extends S.Class<JsonQuery>("JsonQuery")({
-    "group": S.optional(S.NullOr(S.Array(Group))),
-    "order": S.optional(S.NullOr(S.Array(Order))),
-    "select": S.optional(S.NullOr(S.Array(Select))),
-    "where": S.optional(S.NullOr(Where)),
+    "group": S.optional(S.Array(Group)),
+    "order": S.optional(S.Array(Order)),
+    "select": S.optional(S.Array(Select)),
+    "where": S.optional(Where),
 }) {}
 
 export class Test extends S.Class<Test>("Test")({
@@ -265,16 +265,16 @@ export class CustomFields extends S.Class<CustomFields>("CustomFields")({
 }) {}
 
 export class TopLevelMetadata extends S.Class<TopLevelMetadata>("TopLevelMetadata")({
-    "availableDisplayTypes": S.optional(S.NullOr(S.Array(DisplayType))),
-    "custom_fields": S.optional(S.NullOr(CustomFields)),
-    "jsonQuery": S.optional(S.NullOr(JsonQuery)),
-    "rdfClass": S.optional(S.NullOr(S.String)),
-    "rdfSubject": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
-    "renderTypeConfig": S.optional(S.NullOr(MetadataRenderTypeConfig)),
-    "richRendererConfigs": S.optional(S.NullOr(RichRendererConfigs)),
-    "rowIdentifier": S.optional(S.NullOr(S.String)),
-    "rowLabel": S.optional(S.NullOr(S.String)),
-    "v1_archived_properties": S.optional(S.NullOr(V1ArchivedProperties)),
+    "availableDisplayTypes": S.optional(S.Array(DisplayType)),
+    "custom_fields": S.optional(CustomFields),
+    "jsonQuery": S.optional(JsonQuery),
+    "rdfClass": S.optional(S.String),
+    "rdfSubject": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
+    "renderTypeConfig": S.optional(MetadataRenderTypeConfig),
+    "richRendererConfigs": S.optional(RichRendererConfigs),
+    "rowIdentifier": S.optional(S.String),
+    "rowLabel": S.optional(S.String),
+    "v1_archived_properties": S.optional(V1ArchivedProperties),
 }) {}
 
 export class Grant extends S.Class<Grant>("Grant")({
@@ -285,21 +285,21 @@ export class Grant extends S.Class<Grant>("Grant")({
 
 export class TopLevelElement extends S.Class<TopLevelElement>("TopLevelElement")({
     "averageRating": S.Int,
-    "category": S.optional(S.NullOr(S.String)),
+    "category": S.optional(S.String),
     "createdAt": S.Int,
-    "description": S.optional(S.NullOr(S.String)),
-    "displayType": S.optional(S.NullOr(DisplayType)),
+    "description": S.optional(S.String),
+    "displayType": S.optional(DisplayType),
     "downloadCount": S.Int,
-    "flags": S.optional(S.NullOr(S.Array(TopLevelFlag))),
+    "flags": S.optional(S.Array(TopLevelFlag)),
     "grants": S.Array(Grant),
     "hideFromCatalog": S.Boolean,
     "hideFromDataJson": S.Boolean,
     "id": S.String,
-    "indexUpdatedAt": S.optional(S.NullOr(S.Int)),
+    "indexUpdatedAt": S.optional(S.Int),
     "locale": S.String,
     "metadata": TopLevelMetadata,
-    "moderationStatus": S.optional(S.NullOr(S.Boolean)),
-    "modifyingViewUid": S.optional(S.NullOr(ModifyingViewUid)),
+    "moderationStatus": S.optional(S.Boolean),
+    "modifyingViewUid": S.optional(ModifyingViewUid),
     "name": S.String,
     "newBackend": S.Boolean,
     "numberOfComments": S.Int,
@@ -307,19 +307,19 @@ export class TopLevelElement extends S.Class<TopLevelElement>("TopLevelElement")
     "owner": Owner,
     "provenance": Provenance,
     "publicationAppendEnabled": S.Boolean,
-    "publicationDate": S.optional(S.NullOr(S.Int)),
+    "publicationDate": S.optional(S.Int),
     "publicationGroup": S.Int,
     "publicationStage": PublicationStage,
-    "ratings": S.optional(S.NullOr(Ratings)),
-    "resourceName": S.optional(S.NullOr(S.String)),
+    "ratings": S.optional(Ratings),
+    "resourceName": S.optional(S.String),
     "rights": S.Array(Right),
-    "rowClass": S.optional(S.NullOr(S.String)),
-    "rowIdentifierColumnId": S.optional(S.NullOr(S.Int)),
-    "rowsUpdatedAt": S.optional(S.NullOr(S.Int)),
-    "rowsUpdatedBy": S.optional(S.NullOr(RowsUpdatedBy)),
+    "rowClass": S.optional(S.String),
+    "rowIdentifierColumnId": S.optional(S.Int),
+    "rowsUpdatedAt": S.optional(S.Int),
+    "rowsUpdatedBy": S.optional(RowsUpdatedBy),
     "tableAuthor": TableAuthor,
     "tableId": S.Int,
-    "tags": S.optional(S.NullOr(S.Array(S.String))),
+    "tags": S.optional(S.Array(S.String)),
     "totalTimesRated": S.Int,
     "viewCount": S.Int,
     "viewLastModified": S.Int,
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/f6a65.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/f6a65.json/default/TopLevel.ts
index f23a912..ffbd764 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/f6a65.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/f6a65.json/default/TopLevel.ts
@@ -51,11 +51,11 @@ export class Looping extends S.Class<Looping>("Looping")({
 }) {}
 
 export class FixedHeight extends S.Class<FixedHeight>("FixedHeight")({
-    "frames": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
-    "hash": S.optional(S.NullOr(S.String)),
+    "frames": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
+    "hash": S.optional(S.String),
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "mp4": S.optional(S.NullOr(S.String)),
-    "mp4_size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "mp4": S.optional(S.String),
+    "mp4_size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "size": S.String.pipe(S.pattern(/^-?\d+$/)),
     "url": S.String,
     "webp": S.String,
@@ -70,37 +70,37 @@ export class DownsizedSmall extends S.Class<DownsizedSmall>("DownsizedSmall")({
     "width": S.String.pipe(S.pattern(/^-?\d+$/)),
 }) {}
 
-export class Downsized extends S.Class<Downsized>("Downsized")({
+export class The480_WStill extends S.Class<The480_WStill>("The480_WStill")({
     "height": S.String.pipe(S.pattern(/^-?\d+$/)),
-    "size": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "size": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "url": S.String,
     "width": S.String.pipe(S.pattern(/^-?\d+$/)),
 }) {}
 
 export class Images extends S.Class<Images>("Images")({
-    "downsized": Downsized,
-    "downsized_large": Downsized,
-    "downsized_medium": Downsized,
+    "downsized": The480_WStill,
+    "downsized_large": The480_WStill,
+    "downsized_medium": The480_WStill,
     "downsized_small": DownsizedSmall,
-    "downsized_still": Downsized,
+    "downsized_still": The480_WStill,
     "fixed_height": FixedHeight,
     "fixed_height_downsampled": FixedHeight,
     "fixed_height_small": FixedHeight,
-    "fixed_height_small_still": Downsized,
-    "fixed_height_still": Downsized,
+    "fixed_height_small_still": The480_WStill,
+    "fixed_height_still": The480_WStill,
     "fixed_width": FixedHeight,
     "fixed_width_downsampled": FixedHeight,
     "fixed_width_small": FixedHeight,
-    "fixed_width_small_still": Downsized,
-    "fixed_width_still": Downsized,
+    "fixed_width_small_still": The480_WStill,
+    "fixed_width_still": The480_WStill,
     "looping": Looping,
     "original": FixedHeight,
     "original_mp4": DownsizedSmall,
-    "original_still": Downsized,
+    "original_still": The480_WStill,
     "preview": DownsizedSmall,
-    "preview_gif": Downsized,
-    "preview_webp": Downsized,
-    "480w_still": S.optional(S.NullOr(Downsized)),
+    "preview_gif": The480_WStill,
+    "preview_webp": The480_WStill,
+    "480w_still": S.optional(The480_WStill),
 }) {}
 
 export class Datum extends S.Class<Datum>("Datum")({
@@ -120,7 +120,7 @@ export class Datum extends S.Class<Datum>("Datum")({
     "trending_datetime": S.String,
     "type": Type,
     "url": S.String,
-    "user": S.optional(S.NullOr(User)),
+    "user": S.optional(User),
     "username": Username,
 }) {}
 
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/f74d5.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/f74d5.json/default/TopLevel.ts
index 3e20e55..c20893e 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/f74d5.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/f74d5.json/default/TopLevel.ts
@@ -49,27 +49,27 @@ export class Top extends S.Class<Top>("Top")({
 }) {}
 
 export class CachedContents extends S.Class<CachedContents>("CachedContents")({
-    "average": S.optional(S.NullOr(S.String)),
+    "average": S.optional(S.String),
     "largest": S.String,
     "non_null": S.Int,
     "null": S.Int,
     "smallest": S.String,
-    "sum": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "sum": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "top": S.Array(Top),
 }) {}
 
 export class Column extends S.Class<Column>("Column")({
-    "cachedContents": S.optional(S.NullOr(CachedContents)),
+    "cachedContents": S.optional(CachedContents),
     "dataTypeName": TypeName,
     "fieldName": S.String,
-    "flags": S.optional(S.NullOr(S.Array(S.String))),
+    "flags": S.optional(S.Array(S.String)),
     "format": Query,
     "id": S.Int,
     "name": S.String,
     "position": S.Int,
     "renderTypeName": TypeName,
-    "tableColumnId": S.optional(S.NullOr(S.Int)),
-    "width": S.optional(S.NullOr(S.Int)),
+    "tableColumnId": S.optional(S.Int),
+    "width": S.optional(S.Int),
 }) {}
 
 export class View extends S.Class<View>("View")({
diff --git a/base/typescript-effect-schema/test/inputs/json/misc/fcca3.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/misc/fcca3.json/default/TopLevel.ts
index 5d1d434..2ee1767 100644
--- a/base/typescript-effect-schema/test/inputs/json/misc/fcca3.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/misc/fcca3.json/default/TopLevel.ts
@@ -134,9 +134,9 @@ export class Grant extends S.Class<Grant>("Grant")({
 }) {}
 
 export class Format extends S.Class<Format>("Format")({
-    "align": S.optional(S.NullOr(S.String)),
-    "noCommas": S.optional(S.NullOr(S.Literal("true", "false"))),
-    "precisionStyle": S.optional(S.NullOr(S.String)),
+    "align": S.optional(S.String),
+    "noCommas": S.optional(S.Literal("true", "false")),
+    "precisionStyle": S.optional(S.String),
 }) {}
 
 export class Top extends S.Class<Top>("Top")({
@@ -145,28 +145,28 @@ export class Top extends S.Class<Top>("Top")({
 }) {}
 
 export class CachedContents extends S.Class<CachedContents>("CachedContents")({
-    "average": S.optional(S.NullOr(S.String)),
+    "average": S.optional(S.String),
     "largest": S.String,
     "non_null": S.Int,
     "null": S.Int,
     "smallest": S.String,
-    "sum": S.optional(S.NullOr(S.String.pipe(S.pattern(/^-?\d+$/)))),
+    "sum": S.optional(S.String.pipe(S.pattern(/^-?\d+$/))),
     "top": S.Array(Top),
 }) {}
 
 export class Column extends S.Class<Column>("Column")({
-    "cachedContents": S.optional(S.NullOr(CachedContents)),
+    "cachedContents": S.optional(CachedContents),
     "dataTypeName": TypeName,
-    "description": S.optional(S.NullOr(S.String)),
+    "description": S.optional(S.String),
     "fieldName": S.String,
-    "flags": S.optional(S.NullOr(S.Array(S.String))),
+    "flags": S.optional(S.Array(S.String)),
     "format": Format,
     "id": S.Int,
     "name": S.String,
     "position": S.Int,
     "renderTypeName": TypeName,
-    "tableColumnId": S.optional(S.NullOr(S.Int)),
-    "width": S.optional(S.NullOr(S.Int)),
+    "tableColumnId": S.optional(S.Int),
+    "width": S.optional(S.Int),
 }) {}
 
 export class View extends S.Class<View>("View")({
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/bug2521.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/bug2521.json/default/TopLevel.ts
index 9e64037..f86de72 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/bug2521.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/bug2521.json/default/TopLevel.ts
@@ -2,7 +2,7 @@ import * as S from "effect/Schema";
 
 
 export class Option extends S.Class<Option>("Option")({
-    "foo": S.optional(S.NullOr(S.String)),
+    "foo": S.optional(S.String),
     "name": S.String,
 }) {}
 
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/bug427.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/bug427.json/default/TopLevel.ts
index 45c93a4..4d27306 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/bug427.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/bug427.json/default/TopLevel.ts
@@ -91,271 +91,296 @@ export const TentacledKindString = S.Literal(
 );
 export type TentacledKindString = S.Schema.Type<typeof TentacledKindString>;
 
-export class IndecentComment extends S.Class<IndecentComment>("IndecentComment")({
+export class IndecentFlags extends S.Class<IndecentFlags>("IndecentFlags")({
+    "hasExportAssignment": S.optional(S.Boolean),
+    "isAbstract": S.optional(S.Boolean),
+    "isConst": S.optional(S.Boolean),
+    "isExported": S.optional(S.Boolean),
+    "isLet": S.optional(S.Boolean),
+    "isPrivate": S.optional(S.Boolean),
+    "isProtected": S.optional(S.Boolean),
+}) {}
+
+export class IndigoComment extends S.Class<IndigoComment>("IndigoComment")({
+    "returns": S.String,
     "shortText": S.String,
-    "tags": S.optional(S.NullOr(S.Array(S.suspend(() => Tag)))),
 }) {}
 
-export class MischievousType extends S.Class<MischievousType>("MischievousType")({
-    "id": S.optional(S.NullOr(S.Int)),
-    "name": S.optional(S.NullOr(Name)),
-    "operator": S.optional(S.NullOr(S.String)),
-    "target": S.optional(S.NullOr(S.suspend(() => ElementType))),
-    "type": S.String,
+export class IndigoFlags extends S.Class<IndigoFlags>("IndigoFlags")({
+    "isPrivate": S.optional(S.Boolean),
+    "isProtected": S.optional(S.Boolean),
 }) {}
 
-export class FriskyType extends S.Class<FriskyType>("FriskyType")({
-    "declaration": S.optional(S.NullOr(S.suspend(() => IndigoDeclaration))),
-    "name": S.optional(S.NullOr(Name)),
+export class ExtendedBy extends S.Class<ExtendedBy>("ExtendedBy")({
+    "constraint": S.optional(S.suspend(() => ExtendedBy)),
+    "id": S.optional(S.Int),
+    "name": S.String,
     "type": TypeEnum,
+    "typeArguments": S.optional(S.Array(S.suspend(() => ExtendedBy))),
 }) {}
 
-export class MagentaType extends S.Class<MagentaType>("MagentaType")({
-    "declaration": S.optional(S.NullOr(S.suspend(() => StickyDeclaration))),
-    "elementType": S.optional(S.NullOr(S.suspend(() => ElementType))),
-    "elements": S.optional(S.NullOr(S.Array(S.suspend(() => ExtendedBy)))),
-    "id": S.optional(S.NullOr(S.Int)),
-    "name": S.optional(S.NullOr(S.String)),
-    "type": TypeEnum,
-    "typeArguments": S.optional(S.NullOr(S.Array(S.suspend(() => FluffyTypeArgument)))),
-    "types": S.optional(S.NullOr(S.Array(S.suspend(() => ExtendedBy)))),
-    "value": S.optional(S.NullOr(S.String)),
+export class StickyFlags extends S.Class<StickyFlags>("StickyFlags")({
+    "isAbstract": S.optional(S.Boolean),
+    "isConstructorProperty": S.optional(S.Boolean),
+    "isExported": S.optional(S.Boolean),
+    "isPrivate": S.optional(S.Boolean),
+    "isProtected": S.optional(S.Boolean),
+    "isPublic": S.optional(S.Boolean),
+    "isStatic": S.optional(S.Boolean),
 }) {}
 
-export class CunningType extends S.Class<CunningType>("CunningType")({
-    "declaration": S.optional(S.NullOr(S.suspend(() => PurpleDeclaration))),
-    "id": S.optional(S.NullOr(S.Int)),
-    "name": S.optional(S.NullOr(Name)),
-    "type": TypeEnum,
-    "typeArguments": S.optional(S.NullOr(S.Array(S.suspend(() => ElementType)))),
+export class Tag extends S.Class<Tag>("Tag")({
+    "tag": S.String,
+    "text": S.String,
 }) {}
 
-export class AmbitiousType extends S.Class<AmbitiousType>("AmbitiousType")({
-    "declaration": S.optional(S.NullOr(S.suspend(() => TentacledDeclaration))),
-    "elementType": S.optional(S.NullOr(S.suspend(() => ElementType))),
-    "id": S.optional(S.NullOr(S.Int)),
-    "name": S.optional(S.NullOr(S.String)),
-    "type": TypeEnum,
-    "typeArguments": S.optional(S.NullOr(S.Array(S.suspend(() => ElementType)))),
+export class StickyComment extends S.Class<StickyComment>("StickyComment")({
+    "returns": S.optional(S.String),
+    "shortText": S.optional(S.String),
+    "tags": S.optional(S.Array(Tag)),
+    "text": S.optional(S.String),
 }) {}
 
-export class IndecentFlags extends S.Class<IndecentFlags>("IndecentFlags")({
-    "hasExportAssignment": S.optional(S.NullOr(S.Boolean)),
-    "isAbstract": S.optional(S.NullOr(S.Boolean)),
-    "isConst": S.optional(S.NullOr(S.Boolean)),
-    "isExported": S.optional(S.NullOr(S.Boolean)),
-    "isLet": S.optional(S.NullOr(S.Boolean)),
-    "isPrivate": S.optional(S.NullOr(S.Boolean)),
-    "isProtected": S.optional(S.NullOr(S.Boolean)),
+export class TentacledFlags extends S.Class<TentacledFlags>("TentacledFlags")({
+    "isOptional": S.optional(S.Boolean),
+    "isRest": S.optional(S.Boolean),
 }) {}
 
-export class IndigoComment extends S.Class<IndigoComment>("IndigoComment")({
-    "returns": S.String,
-    "shortText": S.String,
+export class TentacledComment extends S.Class<TentacledComment>("TentacledComment")({
+    "shortText": S.optional(S.String),
+    "text": S.optional(S.String),
 }) {}
 
-export class IndecentType extends S.Class<IndecentType>("IndecentType")({
-    "declaration": S.optional(S.NullOr(S.suspend(() => GetSignature))),
-    "elements": S.optional(S.NullOr(S.Array(S.suspend(() => ElementType)))),
-    "name": S.optional(S.NullOr(Name)),
-    "type": TypeEnum,
+export class Group extends S.Class<Group>("Group")({
+    "children": S.Array(S.Int),
+    "kind": S.Int,
+    "title": S.String,
 }) {}
 
-export class IndigoType extends S.Class<IndigoType>("IndigoType")({
-    "constraint": S.optional(S.NullOr(S.suspend(() => ExtendedBy))),
-    "declaration": S.optional(S.NullOr(S.suspend(() => FluffyDeclaration))),
-    "elementType": S.optional(S.NullOr(S.suspend(() => ExtendedBy))),
-    "elements": S.optional(S.NullOr(S.Array(S.suspend(() => ElementType)))),
-    "id": S.optional(S.NullOr(S.Int)),
-    "name": S.optional(S.NullOr(S.String)),
-    "type": TypeEnum,
-    "typeArguments": S.optional(S.NullOr(S.Array(S.suspend(() => PurpleTypeArgument)))),
-    "types": S.optional(S.NullOr(S.Array(S.suspend(() => TypeElement)))),
+export class GetSignatureComment extends S.Class<GetSignatureComment>("GetSignatureComment")({
+    "returns": S.optional(S.String),
+    "shortText": S.optional(S.String),
+    "text": S.optional(S.String),
 }) {}
 
-export class StickyType extends S.Class<StickyType>("StickyType")({
-    "constraint": S.optional(S.NullOr(S.suspend(() => ExtendedBy))),
-    "declaration": S.optional(S.NullOr(S.suspend(() => GetSignature))),
-    "elementType": S.optional(S.NullOr(S.suspend(() => ElementType))),
-    "elements": S.optional(S.NullOr(S.Array(S.suspend(() => ExtendedBy)))),
-    "id": S.optional(S.NullOr(S.Int)),
-    "name": S.optional(S.NullOr(S.String)),
-    "type": TypeEnum,
-    "typeArguments": S.optional(S.NullOr(S.Array(S.suspend(() => ElementType)))),
+export class Source extends S.Class<Source>("Source")({
+    "character": S.Int,
+    "fileName": FileName,
+    "line": S.Int,
 }) {}
 
-export class TypeParameter extends S.Class<TypeParameter>("TypeParameter")({
-    "comment": S.optional(S.NullOr(S.suspend(() => PurpleComment))),
-    "flags": S.suspend(() => GetSignatureFlags),
-    "id": S.Int,
-    "kind": S.Int,
-    "kindString": S.String,
-    "name": S.String,
-    "type": S.optional(S.NullOr(MischievousType)),
+export class FluffyFlags extends S.Class<FluffyFlags>("FluffyFlags")({
+    "isOptional": S.optional(S.Boolean),
 }) {}
 
-export class IndigoFlags extends S.Class<IndigoFlags>("IndigoFlags")({
-    "isPrivate": S.optional(S.NullOr(S.Boolean)),
-    "isProtected": S.optional(S.NullOr(S.Boolean)),
+export class FluffyComment extends S.Class<FluffyComment>("FluffyComment")({
+    "text": S.String,
 }) {}
 
-export class ExtendedBy extends S.Class<ExtendedBy>("ExtendedBy")({
-    "constraint": S.optional(S.NullOr(S.suspend(() => ExtendedBy))),
-    "id": S.optional(S.NullOr(S.Int)),
-    "name": S.String,
+export class ElementType extends S.Class<ElementType>("ElementType")({
+    "name": Name,
     "type": TypeEnum,
-    "typeArguments": S.optional(S.NullOr(S.Array(S.suspend(() => ExtendedBy)))),
 }) {}
 
-export class StickyFlags extends S.Class<StickyFlags>("StickyFlags")({
-    "isAbstract": S.optional(S.NullOr(S.Boolean)),
-    "isConstructorProperty": S.optional(S.NullOr(S.Boolean)),
-    "isExported": S.optional(S.NullOr(S.Boolean)),
-    "isPrivate": S.optional(S.NullOr(S.Boolean)),
-    "isProtected": S.optional(S.NullOr(S.Boolean)),
-    "isPublic": S.optional(S.NullOr(S.Boolean)),
-    "isStatic": S.optional(S.NullOr(S.Boolean)),
+export class MischievousType extends S.Class<MischievousType>("MischievousType")({
+    "id": S.optional(S.Int),
+    "name": S.optional(Name),
+    "operator": S.optional(S.String),
+    "target": S.optional(ElementType),
+    "type": S.String,
 }) {}
 
-export class Tag extends S.Class<Tag>("Tag")({
-    "tag": S.String,
-    "text": S.String,
+export class TypeParameter extends S.Class<TypeParameter>("TypeParameter")({
+    "comment": S.optional(S.suspend(() => PurpleComment)),
+    "flags": S.suspend(() => GetSignatureFlags),
+    "id": S.Int,
+    "kind": S.Int,
+    "kindString": S.String,
+    "name": S.String,
+    "type": S.optional(MischievousType),
 }) {}
 
-export class StickyComment extends S.Class<StickyComment>("StickyComment")({
-    "returns": S.optional(S.NullOr(S.String)),
-    "shortText": S.optional(S.NullOr(S.String)),
-    "tags": S.optional(S.NullOr(S.Array(Tag))),
-    "text": S.optional(S.NullOr(S.String)),
+export class FluffyTypeArgument extends S.Class<FluffyTypeArgument>("FluffyTypeArgument")({
+    "type": TypeEnum,
+    "types": S.Array(ElementType),
 }) {}
 
-export class TypeElement extends S.Class<TypeElement>("TypeElement")({
-    "declaration": S.optional(S.NullOr(S.suspend(() => GetSignature))),
-    "elementType": S.optional(S.NullOr(S.suspend(() => ElementType))),
-    "name": S.optional(S.NullOr(Name)),
-    "type": TypeEnum,
-    "typeArguments": S.optional(S.NullOr(S.Array(S.suspend(() => ElementType)))),
+export class GetSignatureFlags extends S.Class<GetSignatureFlags>("GetSignatureFlags")({
 }) {}
 
-export class FluffyTypeArgument extends S.Class<FluffyTypeArgument>("FluffyTypeArgument")({
-    "type": TypeEnum,
-    "types": S.Array(S.suspend(() => ElementType)),
+export class PurpleTypeArgument extends S.Class<PurpleTypeArgument>("PurpleTypeArgument")({
+    "operator": S.String,
+    "target": ElementType,
+    "type": S.String,
 }) {}
 
-export class TentacledType extends S.Class<TentacledType>("TentacledType")({
-    "declaration": S.optional(S.NullOr(S.suspend(() => PurpleDeclaration))),
-    "name": S.optional(S.NullOr(Name)),
-    "type": TypeEnum,
+export class PurpleFlags extends S.Class<PurpleFlags>("PurpleFlags")({
+    "isExported": S.optional(S.Boolean),
 }) {}
 
-export class FluffyType extends S.Class<FluffyType>("FluffyType")({
-    "elementType": S.optional(S.NullOr(S.suspend(() => ElementType))),
-    "name": S.optional(S.NullOr(Name)),
-    "type": TypeEnum,
-    "typeArguments": S.optional(S.NullOr(S.Array(S.suspend(() => ElementType)))),
+export class PurpleComment extends S.Class<PurpleComment>("PurpleComment")({
+    "shortText": S.String,
 }) {}
 
-export class TentacledFlags extends S.Class<TentacledFlags>("TentacledFlags")({
-    "isOptional": S.optional(S.NullOr(S.Boolean)),
-    "isRest": S.optional(S.NullOr(S.Boolean)),
+export class TentacledChild extends S.Class<TentacledChild>("TentacledChild")({
+    "comment": S.optional(PurpleComment),
+    "defaultValue": S.optional(S.String),
+    "flags": PurpleFlags,
+    "id": S.Int,
+    "kind": S.Int,
+    "kindString": PurpleKindString,
+    "name": S.String,
+    "signatures": S.optional(S.Array(S.suspend(() => PurpleSignature))),
+    "sources": S.Array(Source),
+    "type": S.optional(S.suspend(() => TypeElement)),
 }) {}
 
-export class IndigoDeclaration extends S.Class<IndigoDeclaration>("IndigoDeclaration")({
-    "children": S.optional(S.NullOr(S.Array(S.suspend(() => GetSignature)))),
-    "flags": S.suspend(() => GetSignatureFlags),
-    "groups": S.optional(S.NullOr(S.Array(S.suspend(() => Group)))),
+export class FluffyParameter extends S.Class<FluffyParameter>("FluffyParameter")({
+    "comment": S.optional(FluffyComment),
+    "flags": FluffyFlags,
     "id": S.Int,
     "kind": S.Int,
     "kindString": S.String,
     "name": S.String,
-    "signatures": S.optional(S.NullOr(S.Array(S.suspend(() => GetSignature)))),
-    "sources": S.Array(S.suspend(() => Source)),
+    "sources": S.optional(S.Array(Source)),
+    "type": ElementType,
 }) {}
 
-export class PurpleParameter extends S.Class<PurpleParameter>("PurpleParameter")({
-    "comment": S.optional(S.NullOr(S.suspend(() => TentacledComment))),
-    "flags": S.suspend(() => GetSignatureFlags),
+export class FluffyChild extends S.Class<FluffyChild>("FluffyChild")({
+    "children": S.optional(S.Array(TentacledChild)),
+    "comment": S.optional(StickyComment),
+    "defaultValue": S.optional(S.String),
+    "flags": StickyFlags,
+    "getSignature": S.optional(S.suspend(() => GetSignature)),
+    "groups": S.optional(S.Array(Group)),
     "id": S.Int,
+    "implementationOf": S.optional(ExtendedBy),
+    "inheritedFrom": S.optional(ExtendedBy),
     "kind": S.Int,
-    "kindString": ParameterKindString,
+    "kindString": PurpleKindString,
     "name": S.String,
-    "type": StickyType,
+    "overwrites": S.optional(ExtendedBy),
+    "setSignature": S.optional(S.suspend(() => GetSignature)),
+    "signatures": S.optional(S.Array(S.suspend(() => FluffySignature))),
+    "sources": S.Array(Source),
+    "type": S.optional(S.suspend(() => IndigoType)),
 }) {}
 
-export class IndecentChild extends S.Class<IndecentChild>("IndecentChild")({
-    "flags": S.suspend(() => FluffyFlags),
+export class PurpleChild extends S.Class<PurpleChild>("PurpleChild")({
+    "children": S.optional(S.Array(FluffyChild)),
+    "comment": S.optional(StickyComment),
+    "defaultValue": S.optional(S.String),
+    "extendedBy": S.optional(S.Array(ExtendedBy)),
+    "extendedTypes": S.optional(S.Array(ExtendedBy)),
+    "flags": IndecentFlags,
+    "groups": S.optional(S.Array(Group)),
     "id": S.Int,
+    "implementedBy": S.optional(S.Array(ExtendedBy)),
+    "implementedTypes": S.optional(S.Array(ExtendedBy)),
     "kind": S.Int,
-    "kindString": PurpleKindString,
+    "kindString": FluffyKindString,
     "name": S.String,
-    "sources": S.Array(S.suspend(() => Source)),
-    "type": FriskyType,
+    "signatures": S.optional(S.Array(S.suspend(() => StickySignature))),
+    "sources": S.Array(Source),
+    "type": S.optional(S.suspend(() => MagentaType)),
+    "typeParameter": S.optional(S.Array(TypeParameter)),
 }) {}
 
-export class StickyDeclaration extends S.Class<StickyDeclaration>("StickyDeclaration")({
-    "children": S.optional(S.NullOr(S.Array(IndecentChild))),
-    "flags": S.suspend(() => GetSignatureFlags),
-    "groups": S.optional(S.NullOr(S.Array(S.suspend(() => Group)))),
+export class TopLevelChild extends S.Class<TopLevelChild>("TopLevelChild")({
+    "children": S.Array(PurpleChild),
+    "comment": S.optional(S.suspend(() => IndecentComment)),
+    "flags": PurpleFlags,
+    "groups": S.Array(Group),
+    "id": S.Int,
+    "kind": S.Int,
+    "kindString": TentacledKindString,
+    "name": S.String,
+    "originalName": S.String,
+    "sources": S.Array(Source),
+}) {}
+
+export class IndigoDeclaration extends S.Class<IndigoDeclaration>("IndigoDeclaration")({
+    "children": S.optional(S.Array(S.suspend(() => GetSignature))),
+    "flags": GetSignatureFlags,
+    "groups": S.optional(S.Array(Group)),
     "id": S.Int,
     "kind": S.Int,
     "kindString": S.String,
     "name": S.String,
-    "signatures": S.Array(S.suspend(() => GetSignature)),
-    "sources": S.Array(S.suspend(() => Source)),
+    "signatures": S.optional(S.Array(S.suspend(() => GetSignature))),
+    "sources": S.Array(Source),
 }) {}
 
-export class TentacledComment extends S.Class<TentacledComment>("TentacledComment")({
-    "shortText": S.optional(S.NullOr(S.String)),
-    "text": S.optional(S.NullOr(S.String)),
+export class FriskyType extends S.Class<FriskyType>("FriskyType")({
+    "declaration": S.optional(IndigoDeclaration),
+    "name": S.optional(Name),
+    "type": TypeEnum,
 }) {}
 
-export class PurpleTypeArgument extends S.Class<PurpleTypeArgument>("PurpleTypeArgument")({
-    "operator": S.String,
-    "target": S.suspend(() => ElementType),
-    "type": S.String,
+export class IndecentComment extends S.Class<IndecentComment>("IndecentComment")({
+    "shortText": S.String,
+    "tags": S.optional(S.Array(Tag)),
 }) {}
 
-export class TentacledDeclaration extends S.Class<TentacledDeclaration>("TentacledDeclaration")({
-    "children": S.optional(S.NullOr(S.Array(S.suspend(() => IndigoChild)))),
-    "flags": S.suspend(() => GetSignatureFlags),
-    "groups": S.optional(S.NullOr(S.Array(S.suspend(() => Group)))),
+export class IndecentChild extends S.Class<IndecentChild>("IndecentChild")({
+    "flags": FluffyFlags,
+    "id": S.Int,
+    "kind": S.Int,
+    "kindString": PurpleKindString,
+    "name": S.String,
+    "sources": S.Array(Source),
+    "type": FriskyType,
+}) {}
+
+export class StickyDeclaration extends S.Class<StickyDeclaration>("StickyDeclaration")({
+    "children": S.optional(S.Array(IndecentChild)),
+    "flags": GetSignatureFlags,
+    "groups": S.optional(S.Array(Group)),
     "id": S.Int,
-    "indexSignature": S.optional(S.NullOr(S.suspend(() => IndexSignatureElement))),
     "kind": S.Int,
     "kindString": S.String,
     "name": S.String,
-    "signatures": S.optional(S.NullOr(S.Array(S.suspend(() => GetSignature)))),
-    "sources": S.Array(S.suspend(() => Source)),
+    "signatures": S.Array(S.suspend(() => GetSignature)),
+    "sources": S.Array(Source),
 }) {}
 
-export class HilariousType extends S.Class<HilariousType>("HilariousType")({
-    "declaration": S.suspend(() => GetSignature),
+export class FluffyType extends S.Class<FluffyType>("FluffyType")({
+    "elementType": S.optional(ElementType),
+    "name": S.optional(Name),
     "type": TypeEnum,
+    "typeArguments": S.optional(S.Array(ElementType)),
 }) {}
 
-export class IndexSignature extends S.Class<IndexSignature>("IndexSignature")({
-    "flags": S.suspend(() => GetSignatureFlags),
+export class PurpleSignature extends S.Class<PurpleSignature>("PurpleSignature")({
+    "comment": S.optional(PurpleComment),
+    "flags": GetSignatureFlags,
     "id": S.Int,
     "kind": S.Int,
-    "kindString": S.String,
+    "kindString": SignatureKindString,
     "name": S.String,
     "parameters": S.Array(S.suspend(() => GetSignature)),
-    "type": HilariousType,
+    "type": S.suspend(() => TentacledType),
 }) {}
 
-export class FluffyParameter extends S.Class<FluffyParameter>("FluffyParameter")({
-    "comment": S.optional(S.NullOr(S.suspend(() => FluffyComment))),
-    "flags": S.suspend(() => FluffyFlags),
+export class CunningType extends S.Class<CunningType>("CunningType")({
+    "declaration": S.optional(S.suspend(() => PurpleDeclaration)),
+    "id": S.optional(S.Int),
+    "name": S.optional(Name),
+    "type": TypeEnum,
+    "typeArguments": S.optional(S.Array(ElementType)),
+}) {}
+
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "children": S.Array(TopLevelChild),
+    "flags": GetSignatureFlags,
+    "groups": S.Array(Group),
     "id": S.Int,
     "kind": S.Int,
-    "kindString": S.String,
     "name": S.String,
-    "sources": S.optional(S.NullOr(S.Array(S.suspend(() => Source)))),
-    "type": S.suspend(() => ElementType),
 }) {}
 
 export class GetSignatureParameter extends S.Class<GetSignatureParameter>("GetSignatureParameter")({
-    "comment": S.optional(S.NullOr(TentacledComment)),
+    "comment": S.optional(TentacledComment),
     "flags": TentacledFlags,
     "id": S.Int,
     "kind": S.Int,
@@ -364,42 +389,42 @@ export class GetSignatureParameter extends S.Class<GetSignatureParameter>("GetSi
     "type": FluffyType,
 }) {}
 
-export class Group extends S.Class<Group>("Group")({
-    "children": S.Array(S.Int),
-    "kind": S.Int,
-    "title": S.String,
-}) {}
-
-export class GetSignatureComment extends S.Class<GetSignatureComment>("GetSignatureComment")({
-    "returns": S.optional(S.NullOr(S.String)),
-    "shortText": S.optional(S.NullOr(S.String)),
-    "text": S.optional(S.NullOr(S.String)),
+export class HilariousType extends S.Class<HilariousType>("HilariousType")({
+    "declaration": S.suspend(() => GetSignature),
+    "type": TypeEnum,
 }) {}
 
-export class TentacledParameter extends S.Class<TentacledParameter>("TentacledParameter")({
-    "comment": S.optional(S.NullOr(TentacledComment)),
-    "defaultValue": S.optional(S.NullOr(S.String)),
-    "flags": TentacledFlags,
+export class IndexSignature extends S.Class<IndexSignature>("IndexSignature")({
+    "flags": GetSignatureFlags,
     "id": S.Int,
     "kind": S.Int,
-    "kindString": ParameterKindString,
+    "kindString": S.String,
     "name": S.String,
-    "originalName": S.optional(S.NullOr(S.String)),
-    "type": AmbitiousType,
+    "parameters": S.Array(S.suspend(() => GetSignature)),
+    "type": HilariousType,
 }) {}
 
-export class Source extends S.Class<Source>("Source")({
-    "character": S.Int,
-    "fileName": FileName,
-    "line": S.Int,
+export class MagentaType extends S.Class<MagentaType>("MagentaType")({
+    "declaration": S.optional(StickyDeclaration),
+    "elementType": S.optional(ElementType),
+    "elements": S.optional(S.Array(ExtendedBy)),
+    "id": S.optional(S.Int),
+    "name": S.optional(S.String),
+    "type": TypeEnum,
+    "typeArguments": S.optional(S.Array(FluffyTypeArgument)),
+    "types": S.optional(S.Array(ExtendedBy)),
+    "value": S.optional(S.String),
 }) {}
 
-export class FluffyFlags extends S.Class<FluffyFlags>("FluffyFlags")({
-    "isOptional": S.optional(S.NullOr(S.Boolean)),
+export class IndecentType extends S.Class<IndecentType>("IndecentType")({
+    "declaration": S.optional(S.suspend(() => GetSignature)),
+    "elements": S.optional(S.Array(ElementType)),
+    "name": S.optional(Name),
+    "type": TypeEnum,
 }) {}
 
 export class StickyChild extends S.Class<StickyChild>("StickyChild")({
-    "comment": S.optional(S.NullOr(S.suspend(() => FluffyComment))),
+    "comment": S.optional(FluffyComment),
     "flags": FluffyFlags,
     "id": S.Int,
     "kind": S.Int,
@@ -409,78 +434,79 @@ export class StickyChild extends S.Class<StickyChild>("StickyChild")({
     "type": IndecentType,
 }) {}
 
-export class FluffyDeclaration extends S.Class<FluffyDeclaration>("FluffyDeclaration")({
-    "children": S.optional(S.NullOr(S.Array(StickyChild))),
-    "flags": S.suspend(() => GetSignatureFlags),
-    "groups": S.optional(S.NullOr(S.Array(Group))),
+export class GetSignatureType extends S.Class<GetSignatureType>("GetSignatureType")({
+    "declaration": S.optional(S.suspend(() => GetSignature)),
+    "elementType": S.optional(ElementType),
+    "name": S.optional(Name),
+    "type": TypeEnum,
+}) {}
+
+export class IndexSignatureElement extends S.Class<IndexSignatureElement>("IndexSignatureElement")({
+    "flags": GetSignatureFlags,
     "id": S.Int,
-    "indexSignature": S.optional(S.NullOr(IndexSignature)),
     "kind": S.Int,
     "kindString": S.String,
     "name": S.String,
-    "signatures": S.optional(S.NullOr(S.Array(S.suspend(() => TentacledSignature)))),
-    "sources": S.Array(Source),
-}) {}
-
-export class FluffyComment extends S.Class<FluffyComment>("FluffyComment")({
-    "text": S.String,
-}) {}
-
-export class ElementType extends S.Class<ElementType>("ElementType")({
-    "name": Name,
-    "type": TypeEnum,
+    "parameters": S.optional(S.Array(S.suspend(() => GetSignature))),
+    "type": S.suspend(() => PurpleType),
 }) {}
 
 export class PurpleType extends S.Class<PurpleType>("PurpleType")({
-    "declaration": S.optional(S.NullOr(S.suspend(() => GetSignature))),
-    "name": S.optional(S.NullOr(Name)),
+    "declaration": S.optional(S.suspend(() => GetSignature)),
+    "name": S.optional(Name),
     "type": TypeEnum,
 }) {}
 
-export class GetSignatureType extends S.Class<GetSignatureType>("GetSignatureType")({
-    "declaration": S.optional(S.NullOr(S.suspend(() => GetSignature))),
-    "elementType": S.optional(S.NullOr(ElementType)),
-    "name": S.optional(S.NullOr(Name)),
-    "type": TypeEnum,
-}) {}
-
-export class GetSignatureFlags extends S.Class<GetSignatureFlags>("GetSignatureFlags")({
-}) {}
-
-export class PurpleSignature extends S.Class<PurpleSignature>("PurpleSignature")({
-    "comment": S.optional(S.NullOr(S.suspend(() => PurpleComment))),
+export class TentacledSignature extends S.Class<TentacledSignature>("TentacledSignature")({
+    "comment": S.optional(IndigoComment),
     "flags": GetSignatureFlags,
     "id": S.Int,
     "kind": S.Int,
     "kindString": SignatureKindString,
     "name": S.String,
-    "parameters": S.Array(S.suspend(() => GetSignature)),
-    "type": TentacledType,
+    "parameters": S.optional(S.Array(FluffyParameter)),
+    "type": ExtendedBy,
 }) {}
 
-export class StickySignature extends S.Class<StickySignature>("StickySignature")({
-    "comment": StickyComment,
-    "flags": IndigoFlags,
+export class GetSignatureChild extends S.Class<GetSignatureChild>("GetSignatureChild")({
+    "comment": S.optional(FluffyComment),
+    "flags": FluffyFlags,
     "id": S.Int,
     "kind": S.Int,
-    "kindString": SignatureKindString,
+    "kindString": PurpleKindString,
     "name": S.String,
-    "parameters": S.optional(S.NullOr(S.Array(TentacledParameter))),
-    "type": CunningType,
-    "typeParameter": S.optional(S.NullOr(S.Array(S.suspend(() => GetSignature)))),
+    "sources": S.Array(Source),
+    "type": PurpleType,
 }) {}
 
-export class PurpleFlags extends S.Class<PurpleFlags>("PurpleFlags")({
-    "isExported": S.optional(S.NullOr(S.Boolean)),
+export class GetSignature extends S.Class<GetSignature>("GetSignature")({
+    "children": S.optional(S.Array(GetSignatureChild)),
+    "comment": S.optional(GetSignatureComment),
+    "defaultValue": S.optional(S.String),
+    "flags": GetSignatureFlags,
+    "groups": S.optional(S.Array(Group)),
+    "id": S.Int,
+    "kind": S.Int,
+    "kindString": S.String,
+    "name": S.String,
+    "parameters": S.optional(S.Array(GetSignatureParameter)),
+    "signatures": S.optional(S.Array(IndexSignatureElement)),
+    "sources": S.optional(S.Array(Source)),
+    "type": S.optional(GetSignatureType),
+    "typeParameter": S.optional(S.Array(S.suspend(() => GetSignature))),
 }) {}
 
-export class PurpleComment extends S.Class<PurpleComment>("PurpleComment")({
-    "shortText": S.String,
+export class TypeElement extends S.Class<TypeElement>("TypeElement")({
+    "declaration": S.optional(GetSignature),
+    "elementType": S.optional(ElementType),
+    "name": S.optional(Name),
+    "type": TypeEnum,
+    "typeArguments": S.optional(S.Array(ElementType)),
 }) {}
 
 export class IndigoChild extends S.Class<IndigoChild>("IndigoChild")({
     "comment": FluffyComment,
-    "defaultValue": S.optional(S.NullOr(S.String)),
+    "defaultValue": S.optional(S.String),
     "flags": FluffyFlags,
     "id": S.Int,
     "kind": S.Int,
@@ -490,72 +516,54 @@ export class IndigoChild extends S.Class<IndigoChild>("IndigoChild")({
     "type": IndecentType,
 }) {}
 
-export class TentacledSignature extends S.Class<TentacledSignature>("TentacledSignature")({
-    "comment": S.optional(S.NullOr(IndigoComment)),
+export class TentacledDeclaration extends S.Class<TentacledDeclaration>("TentacledDeclaration")({
+    "children": S.optional(S.Array(IndigoChild)),
     "flags": GetSignatureFlags,
+    "groups": S.optional(S.Array(Group)),
     "id": S.Int,
+    "indexSignature": S.optional(IndexSignatureElement),
     "kind": S.Int,
-    "kindString": SignatureKindString,
+    "kindString": S.String,
     "name": S.String,
-    "parameters": S.optional(S.NullOr(S.Array(FluffyParameter))),
-    "type": ExtendedBy,
+    "signatures": S.optional(S.Array(GetSignature)),
+    "sources": S.Array(Source),
 }) {}
 
-export class TentacledChild extends S.Class<TentacledChild>("TentacledChild")({
-    "comment": S.optional(S.NullOr(PurpleComment)),
-    "defaultValue": S.optional(S.NullOr(S.String)),
-    "flags": PurpleFlags,
-    "id": S.Int,
-    "kind": S.Int,
-    "kindString": PurpleKindString,
-    "name": S.String,
-    "signatures": S.optional(S.NullOr(S.Array(PurpleSignature))),
-    "sources": S.Array(Source),
-    "type": S.optional(S.NullOr(TypeElement)),
+export class AmbitiousType extends S.Class<AmbitiousType>("AmbitiousType")({
+    "declaration": S.optional(TentacledDeclaration),
+    "elementType": S.optional(ElementType),
+    "id": S.optional(S.Int),
+    "name": S.optional(S.String),
+    "type": TypeEnum,
+    "typeArguments": S.optional(S.Array(ElementType)),
 }) {}
 
-export class FluffyChild extends S.Class<FluffyChild>("FluffyChild")({
-    "children": S.optional(S.NullOr(S.Array(TentacledChild))),
-    "comment": S.optional(S.NullOr(StickyComment)),
-    "defaultValue": S.optional(S.NullOr(S.String)),
-    "flags": StickyFlags,
-    "getSignature": S.optional(S.NullOr(S.suspend(() => GetSignature))),
-    "groups": S.optional(S.NullOr(S.Array(Group))),
+export class TentacledParameter extends S.Class<TentacledParameter>("TentacledParameter")({
+    "comment": S.optional(TentacledComment),
+    "defaultValue": S.optional(S.String),
+    "flags": TentacledFlags,
     "id": S.Int,
-    "implementationOf": S.optional(S.NullOr(ExtendedBy)),
-    "inheritedFrom": S.optional(S.NullOr(ExtendedBy)),
     "kind": S.Int,
-    "kindString": PurpleKindString,
+    "kindString": ParameterKindString,
     "name": S.String,
-    "overwrites": S.optional(S.NullOr(ExtendedBy)),
-    "setSignature": S.optional(S.NullOr(S.suspend(() => GetSignature))),
-    "signatures": S.optional(S.NullOr(S.Array(S.suspend(() => FluffySignature)))),
-    "sources": S.Array(Source),
-    "type": S.optional(S.NullOr(IndigoType)),
+    "originalName": S.optional(S.String),
+    "type": AmbitiousType,
 }) {}
 
-export class PurpleChild extends S.Class<PurpleChild>("PurpleChild")({
-    "children": S.optional(S.NullOr(S.Array(FluffyChild))),
-    "comment": S.optional(S.NullOr(StickyComment)),
-    "defaultValue": S.optional(S.NullOr(S.String)),
-    "extendedBy": S.optional(S.NullOr(S.Array(ExtendedBy))),
-    "extendedTypes": S.optional(S.NullOr(S.Array(ExtendedBy))),
-    "flags": IndecentFlags,
-    "groups": S.optional(S.NullOr(S.Array(Group))),
+export class StickySignature extends S.Class<StickySignature>("StickySignature")({
+    "comment": StickyComment,
+    "flags": IndigoFlags,
     "id": S.Int,
-    "implementedBy": S.optional(S.NullOr(S.Array(ExtendedBy))),
-    "implementedTypes": S.optional(S.NullOr(S.Array(ExtendedBy))),
     "kind": S.Int,
-    "kindString": FluffyKindString,
+    "kindString": SignatureKindString,
     "name": S.String,
-    "signatures": S.optional(S.NullOr(S.Array(StickySignature))),
-    "sources": S.Array(Source),
-    "type": S.optional(S.NullOr(MagentaType)),
-    "typeParameter": S.optional(S.NullOr(S.Array(TypeParameter))),
+    "parameters": S.optional(S.Array(TentacledParameter)),
+    "type": CunningType,
+    "typeParameter": S.optional(S.Array(GetSignature)),
 }) {}
 
 export class PurpleDeclaration extends S.Class<PurpleDeclaration>("PurpleDeclaration")({
-    "children": S.Array(S.suspend(() => GetSignature)),
+    "children": S.Array(GetSignature),
     "flags": GetSignatureFlags,
     "groups": S.Array(Group),
     "id": S.Int,
@@ -564,77 +572,69 @@ export class PurpleDeclaration extends S.Class<PurpleDeclaration>("PurpleDeclara
     "name": S.String,
 }) {}
 
-export class GetSignature extends S.Class<GetSignature>("GetSignature")({
-    "children": S.optional(S.NullOr(S.Array(S.suspend(() => GetSignatureChild)))),
-    "comment": S.optional(S.NullOr(GetSignatureComment)),
-    "defaultValue": S.optional(S.NullOr(S.String)),
+export class FluffyDeclaration extends S.Class<FluffyDeclaration>("FluffyDeclaration")({
+    "children": S.optional(S.Array(StickyChild)),
     "flags": GetSignatureFlags,
-    "groups": S.optional(S.NullOr(S.Array(Group))),
+    "groups": S.optional(S.Array(Group)),
     "id": S.Int,
+    "indexSignature": S.optional(IndexSignature),
     "kind": S.Int,
     "kindString": S.String,
     "name": S.String,
-    "parameters": S.optional(S.NullOr(S.Array(GetSignatureParameter))),
-    "signatures": S.optional(S.NullOr(S.Array(S.suspend(() => IndexSignatureElement)))),
-    "sources": S.optional(S.NullOr(S.Array(Source))),
-    "type": S.optional(S.NullOr(GetSignatureType)),
-    "typeParameter": S.optional(S.NullOr(S.Array(S.suspend(() => GetSignature)))),
+    "signatures": S.optional(S.Array(TentacledSignature)),
+    "sources": S.Array(Source),
 }) {}
 
-export class TopLevelChild extends S.Class<TopLevelChild>("TopLevelChild")({
-    "children": S.Array(PurpleChild),
-    "comment": S.optional(S.NullOr(IndecentComment)),
-    "flags": PurpleFlags,
-    "groups": S.Array(Group),
-    "id": S.Int,
-    "kind": S.Int,
-    "kindString": TentacledKindString,
-    "name": S.String,
-    "originalName": S.String,
-    "sources": S.Array(Source),
+export class IndigoType extends S.Class<IndigoType>("IndigoType")({
+    "constraint": S.optional(ExtendedBy),
+    "declaration": S.optional(FluffyDeclaration),
+    "elementType": S.optional(ExtendedBy),
+    "elements": S.optional(S.Array(ElementType)),
+    "id": S.optional(S.Int),
+    "name": S.optional(S.String),
+    "type": TypeEnum,
+    "typeArguments": S.optional(S.Array(PurpleTypeArgument)),
+    "types": S.optional(S.Array(TypeElement)),
 }) {}
 
-export class IndexSignatureElement extends S.Class<IndexSignatureElement>("IndexSignatureElement")({
-    "flags": GetSignatureFlags,
-    "id": S.Int,
-    "kind": S.Int,
-    "kindString": S.String,
-    "name": S.String,
-    "parameters": S.optional(S.NullOr(S.Array(GetSignature))),
-    "type": PurpleType,
+export class StickyType extends S.Class<StickyType>("StickyType")({
+    "constraint": S.optional(ExtendedBy),
+    "declaration": S.optional(GetSignature),
+    "elementType": S.optional(ElementType),
+    "elements": S.optional(S.Array(ExtendedBy)),
+    "id": S.optional(S.Int),
+    "name": S.optional(S.String),
+    "type": TypeEnum,
+    "typeArguments": S.optional(S.Array(ElementType)),
 }) {}
 
-export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "children": S.Array(TopLevelChild),
+export class PurpleParameter extends S.Class<PurpleParameter>("PurpleParameter")({
+    "comment": S.optional(TentacledComment),
     "flags": GetSignatureFlags,
-    "groups": S.Array(Group),
     "id": S.Int,
     "kind": S.Int,
+    "kindString": ParameterKindString,
     "name": S.String,
+    "type": StickyType,
 }) {}
 
-export class GetSignatureChild extends S.Class<GetSignatureChild>("GetSignatureChild")({
-    "comment": S.optional(S.NullOr(FluffyComment)),
-    "flags": FluffyFlags,
-    "id": S.Int,
-    "kind": S.Int,
-    "kindString": PurpleKindString,
-    "name": S.String,
-    "sources": S.Array(Source),
-    "type": PurpleType,
+export class TentacledType extends S.Class<TentacledType>("TentacledType")({
+    "declaration": S.optional(PurpleDeclaration),
+    "name": S.optional(Name),
+    "type": TypeEnum,
 }) {}
 
 export class FluffySignature extends S.Class<FluffySignature>("FluffySignature")({
-    "comment": S.optional(S.NullOr(StickyComment)),
+    "comment": S.optional(StickyComment),
     "flags": IndigoFlags,
     "id": S.Int,
-    "implementationOf": S.optional(S.NullOr(ExtendedBy)),
-    "inheritedFrom": S.optional(S.NullOr(ExtendedBy)),
+    "implementationOf": S.optional(ExtendedBy),
+    "inheritedFrom": S.optional(ExtendedBy),
     "kind": S.Int,
     "kindString": SignatureKindString,
     "name": S.String,
-    "overwrites": S.optional(S.NullOr(ExtendedBy)),
-    "parameters": S.optional(S.NullOr(S.Array(PurpleParameter))),
+    "overwrites": S.optional(ExtendedBy),
+    "parameters": S.optional(S.Array(PurpleParameter)),
     "type": ExtendedBy,
-    "typeParameter": S.optional(S.NullOr(S.Array(GetSignature))),
+    "typeParameter": S.optional(S.Array(GetSignature)),
 }) {}
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/combinations1.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/combinations1.json/default/TopLevel.ts
index f1fe8ed..e2e21a7 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/combinations1.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/combinations1.json/default/TopLevel.ts
@@ -14,14 +14,14 @@ export class HemocoeleClass extends S.Class<HemocoeleClass>("HemocoeleClass")({
     "amelification": S.optional(S.Null),
     "autobiographic": S.optional(S.Null),
     "berat": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
     "disproportionably": S.optional(S.Null),
     "erythrite": S.optional(S.Null),
     "graphic": S.optional(S.Null),
     "hepatological": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "incommensurably": S.optional(S.Null),
     "misaffirm": S.optional(S.Null),
     "nonbookish": S.optional(S.Null),
@@ -201,11 +201,11 @@ export class CredulityClass extends S.Class<CredulityClass>("CredulityClass")({
 export class CoadjustClass extends S.Class<CoadjustClass>("CoadjustClass")({
     "amidosulphonal": S.optional(S.Null),
     "Benny": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
     "ensnare": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "hybridizer": S.optional(S.Null),
     "leastwise": S.optional(S.Null),
     "lof": S.optional(S.Null),
@@ -238,13 +238,13 @@ export class ChemotherapeuticClass extends S.Class<ChemotherapeuticClass>("Chemo
     "angioneurotic": S.optional(S.Null),
     "availment": S.optional(S.Null),
     "bladelet": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "catharticalness": S.optional(S.Number),
     "caulis": S.optional(S.Null),
     "chalcus": S.optional(S.Null),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "Chirotherium": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
     "enteradenological": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "imporosity": S.optional(S.Null),
     "insistently": S.optional(S.Null),
     "intraparietal": S.optional(S.Null),
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/combinations1.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/combinations1.json/just-schema-true--8c4ca457bcba/TopLevel.ts
index f1fe8ed..e2e21a7 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/combinations1.json/just-schema-true--8c4ca457bcba/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/combinations1.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -14,14 +14,14 @@ export class HemocoeleClass extends S.Class<HemocoeleClass>("HemocoeleClass")({
     "amelification": S.optional(S.Null),
     "autobiographic": S.optional(S.Null),
     "berat": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
     "disproportionably": S.optional(S.Null),
     "erythrite": S.optional(S.Null),
     "graphic": S.optional(S.Null),
     "hepatological": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "incommensurably": S.optional(S.Null),
     "misaffirm": S.optional(S.Null),
     "nonbookish": S.optional(S.Null),
@@ -201,11 +201,11 @@ export class CredulityClass extends S.Class<CredulityClass>("CredulityClass")({
 export class CoadjustClass extends S.Class<CoadjustClass>("CoadjustClass")({
     "amidosulphonal": S.optional(S.Null),
     "Benny": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
     "ensnare": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "hybridizer": S.optional(S.Null),
     "leastwise": S.optional(S.Null),
     "lof": S.optional(S.Null),
@@ -238,13 +238,13 @@ export class ChemotherapeuticClass extends S.Class<ChemotherapeuticClass>("Chemo
     "angioneurotic": S.optional(S.Null),
     "availment": S.optional(S.Null),
     "bladelet": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "catharticalness": S.optional(S.Number),
     "caulis": S.optional(S.Null),
     "chalcus": S.optional(S.Null),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "Chirotherium": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
     "enteradenological": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "imporosity": S.optional(S.Null),
     "insistently": S.optional(S.Null),
     "intraparietal": S.optional(S.Null),
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/combinations2.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/combinations2.json/default/TopLevel.ts
index 659fe2e..79d276d 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/combinations2.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/combinations2.json/default/TopLevel.ts
@@ -25,31 +25,31 @@ export class OskarClass extends S.Class<OskarClass>("OskarClass")({
 }) {}
 
 export class LaviniaClass extends S.Class<LaviniaClass>("LaviniaClass")({
-    "agitable": S.optional(S.NullOr(S.Int)),
-    "asininity": S.optional(S.NullOr(S.Int)),
-    "benefiter": S.optional(S.NullOr(S.Int)),
-    "bronzelike": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "cholesteatomatous": S.optional(S.NullOr(S.Int)),
-    "deprivement": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "flippantness": S.optional(S.NullOr(S.Int)),
-    "fogproof": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "merrymeeting": S.optional(S.NullOr(S.Int)),
+    "agitable": S.optional(S.Int),
+    "asininity": S.optional(S.Int),
+    "benefiter": S.optional(S.Int),
+    "bronzelike": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "cholesteatomatous": S.optional(S.Int),
+    "deprivement": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "flippantness": S.optional(S.Int),
+    "fogproof": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "merrymeeting": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "overcareful": S.optional(S.NullOr(S.Int)),
-    "panaris": S.optional(S.NullOr(S.Int)),
-    "preacceptance": S.optional(S.NullOr(S.Int)),
-    "quinoxaline": S.optional(S.NullOr(S.Int)),
-    "sig": S.optional(S.NullOr(S.Int)),
-    "superconfusion": S.optional(S.NullOr(S.Int)),
-    "Tacana": S.optional(S.NullOr(S.Int)),
-    "tillotter": S.optional(S.NullOr(S.Int)),
-    "tranquillize": S.optional(S.NullOr(S.Int)),
-    "unquestionable": S.optional(S.NullOr(S.Int)),
-    "uproute": S.optional(S.NullOr(S.Int)),
+    "overcareful": S.optional(S.Int),
+    "panaris": S.optional(S.Int),
+    "preacceptance": S.optional(S.Int),
+    "quinoxaline": S.optional(S.Int),
+    "sig": S.optional(S.Int),
+    "superconfusion": S.optional(S.Int),
+    "Tacana": S.optional(S.Int),
+    "tillotter": S.optional(S.Int),
+    "tranquillize": S.optional(S.Int),
+    "unquestionable": S.optional(S.Int),
+    "uproute": S.optional(S.Int),
 }) {}
 
 export class GryphosaurusClass extends S.Class<GryphosaurusClass>("GryphosaurusClass")({
@@ -76,31 +76,31 @@ export class GryphosaurusClass extends S.Class<GryphosaurusClass>("GryphosaurusC
 }) {}
 
 export class DiscordiaClass extends S.Class<DiscordiaClass>("DiscordiaClass")({
-    "Altaic": S.optional(S.NullOr(S.Int)),
-    "amoristic": S.optional(S.NullOr(S.Int)),
-    "blennophthalmia": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "disciplinability": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "goofer": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "laryngograph": S.optional(S.NullOr(S.Int)),
-    "leucitis": S.optional(S.NullOr(S.Int)),
-    "lymphocyst": S.optional(S.NullOr(S.Int)),
-    "microcosmology": S.optional(S.NullOr(S.Int)),
-    "nauseation": S.optional(S.NullOr(S.Int)),
+    "Altaic": S.optional(S.Int),
+    "amoristic": S.optional(S.Int),
+    "blennophthalmia": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "disciplinability": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "goofer": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "laryngograph": S.optional(S.Int),
+    "leucitis": S.optional(S.Int),
+    "lymphocyst": S.optional(S.Int),
+    "microcosmology": S.optional(S.Int),
+    "nauseation": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "Patarin": S.optional(S.NullOr(S.Int)),
-    "preliberal": S.optional(S.NullOr(S.Int)),
-    "prettifier": S.optional(S.NullOr(S.Int)),
-    "rangework": S.optional(S.NullOr(S.Int)),
-    "redient": S.optional(S.NullOr(S.Int)),
-    "subfusiform": S.optional(S.NullOr(S.Int)),
-    "suicidical": S.optional(S.NullOr(S.Int)),
-    "swow": S.optional(S.NullOr(S.Int)),
-    "wastrel": S.optional(S.NullOr(S.Int)),
-    "wingle": S.optional(S.NullOr(S.Int)),
+    "Patarin": S.optional(S.Int),
+    "preliberal": S.optional(S.Int),
+    "prettifier": S.optional(S.Int),
+    "rangework": S.optional(S.Int),
+    "redient": S.optional(S.Int),
+    "subfusiform": S.optional(S.Int),
+    "suicidical": S.optional(S.Int),
+    "swow": S.optional(S.Int),
+    "wastrel": S.optional(S.Int),
+    "wingle": S.optional(S.Int),
 }) {}
 
 export class ChytridiaceaeClass extends S.Class<ChytridiaceaeClass>("ChytridiaceaeClass")({
@@ -173,31 +173,31 @@ export class AnkeeClass extends S.Class<AnkeeClass>("AnkeeClass")({
 }) {}
 
 export class Amphithyron extends S.Class<Amphithyron>("Amphithyron")({
-    "akroasis": S.optional(S.NullOr(S.Int)),
-    "antiphonical": S.optional(S.NullOr(S.Int)),
-    "basebred": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "conductometric": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "ensilation": S.optional(S.NullOr(S.Int)),
-    "eyebolt": S.optional(S.NullOr(S.Int)),
-    "fistulated": S.optional(S.NullOr(S.Int)),
-    "heteropod": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "Juniperus": S.optional(S.NullOr(S.Int)),
-    "labyrinthically": S.optional(S.NullOr(S.Int)),
-    "martyrization": S.optional(S.NullOr(S.Int)),
-    "mispolicy": S.optional(S.NullOr(S.Int)),
-    "multipara": S.optional(S.NullOr(S.Int)),
-    "Nazirite": S.optional(S.NullOr(S.Int)),
+    "akroasis": S.optional(S.Int),
+    "antiphonical": S.optional(S.Int),
+    "basebred": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "conductometric": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "ensilation": S.optional(S.Int),
+    "eyebolt": S.optional(S.Int),
+    "fistulated": S.optional(S.Int),
+    "heteropod": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "Juniperus": S.optional(S.Int),
+    "labyrinthically": S.optional(S.Int),
+    "martyrization": S.optional(S.Int),
+    "mispolicy": S.optional(S.Int),
+    "multipara": S.optional(S.Int),
+    "Nazirite": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "possessorial": S.optional(S.NullOr(S.Int)),
-    "shamed": S.optional(S.NullOr(S.Int)),
-    "shelfworn": S.optional(S.NullOr(S.Int)),
-    "stagnum": S.optional(S.NullOr(S.Int)),
-    "Those": S.optional(S.NullOr(S.Int)),
-    "undecimal": S.optional(S.NullOr(S.Int)),
+    "possessorial": S.optional(S.Int),
+    "shamed": S.optional(S.Int),
+    "shelfworn": S.optional(S.Int),
+    "stagnum": S.optional(S.Int),
+    "Those": S.optional(S.Int),
+    "undecimal": S.optional(S.Int),
 }) {}
 
 export class Rebecca extends S.Class<Rebecca>("Rebecca")({
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/combinations2.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/combinations2.json/just-schema-true--8c4ca457bcba/TopLevel.ts
index 659fe2e..79d276d 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/combinations2.json/just-schema-true--8c4ca457bcba/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/combinations2.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -25,31 +25,31 @@ export class OskarClass extends S.Class<OskarClass>("OskarClass")({
 }) {}
 
 export class LaviniaClass extends S.Class<LaviniaClass>("LaviniaClass")({
-    "agitable": S.optional(S.NullOr(S.Int)),
-    "asininity": S.optional(S.NullOr(S.Int)),
-    "benefiter": S.optional(S.NullOr(S.Int)),
-    "bronzelike": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "cholesteatomatous": S.optional(S.NullOr(S.Int)),
-    "deprivement": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "flippantness": S.optional(S.NullOr(S.Int)),
-    "fogproof": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "merrymeeting": S.optional(S.NullOr(S.Int)),
+    "agitable": S.optional(S.Int),
+    "asininity": S.optional(S.Int),
+    "benefiter": S.optional(S.Int),
+    "bronzelike": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "cholesteatomatous": S.optional(S.Int),
+    "deprivement": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "flippantness": S.optional(S.Int),
+    "fogproof": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "merrymeeting": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "overcareful": S.optional(S.NullOr(S.Int)),
-    "panaris": S.optional(S.NullOr(S.Int)),
-    "preacceptance": S.optional(S.NullOr(S.Int)),
-    "quinoxaline": S.optional(S.NullOr(S.Int)),
-    "sig": S.optional(S.NullOr(S.Int)),
-    "superconfusion": S.optional(S.NullOr(S.Int)),
-    "Tacana": S.optional(S.NullOr(S.Int)),
-    "tillotter": S.optional(S.NullOr(S.Int)),
-    "tranquillize": S.optional(S.NullOr(S.Int)),
-    "unquestionable": S.optional(S.NullOr(S.Int)),
-    "uproute": S.optional(S.NullOr(S.Int)),
+    "overcareful": S.optional(S.Int),
+    "panaris": S.optional(S.Int),
+    "preacceptance": S.optional(S.Int),
+    "quinoxaline": S.optional(S.Int),
+    "sig": S.optional(S.Int),
+    "superconfusion": S.optional(S.Int),
+    "Tacana": S.optional(S.Int),
+    "tillotter": S.optional(S.Int),
+    "tranquillize": S.optional(S.Int),
+    "unquestionable": S.optional(S.Int),
+    "uproute": S.optional(S.Int),
 }) {}
 
 export class GryphosaurusClass extends S.Class<GryphosaurusClass>("GryphosaurusClass")({
@@ -76,31 +76,31 @@ export class GryphosaurusClass extends S.Class<GryphosaurusClass>("GryphosaurusC
 }) {}
 
 export class DiscordiaClass extends S.Class<DiscordiaClass>("DiscordiaClass")({
-    "Altaic": S.optional(S.NullOr(S.Int)),
-    "amoristic": S.optional(S.NullOr(S.Int)),
-    "blennophthalmia": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "disciplinability": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "goofer": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "laryngograph": S.optional(S.NullOr(S.Int)),
-    "leucitis": S.optional(S.NullOr(S.Int)),
-    "lymphocyst": S.optional(S.NullOr(S.Int)),
-    "microcosmology": S.optional(S.NullOr(S.Int)),
-    "nauseation": S.optional(S.NullOr(S.Int)),
+    "Altaic": S.optional(S.Int),
+    "amoristic": S.optional(S.Int),
+    "blennophthalmia": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "disciplinability": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "goofer": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "laryngograph": S.optional(S.Int),
+    "leucitis": S.optional(S.Int),
+    "lymphocyst": S.optional(S.Int),
+    "microcosmology": S.optional(S.Int),
+    "nauseation": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "Patarin": S.optional(S.NullOr(S.Int)),
-    "preliberal": S.optional(S.NullOr(S.Int)),
-    "prettifier": S.optional(S.NullOr(S.Int)),
-    "rangework": S.optional(S.NullOr(S.Int)),
-    "redient": S.optional(S.NullOr(S.Int)),
-    "subfusiform": S.optional(S.NullOr(S.Int)),
-    "suicidical": S.optional(S.NullOr(S.Int)),
-    "swow": S.optional(S.NullOr(S.Int)),
-    "wastrel": S.optional(S.NullOr(S.Int)),
-    "wingle": S.optional(S.NullOr(S.Int)),
+    "Patarin": S.optional(S.Int),
+    "preliberal": S.optional(S.Int),
+    "prettifier": S.optional(S.Int),
+    "rangework": S.optional(S.Int),
+    "redient": S.optional(S.Int),
+    "subfusiform": S.optional(S.Int),
+    "suicidical": S.optional(S.Int),
+    "swow": S.optional(S.Int),
+    "wastrel": S.optional(S.Int),
+    "wingle": S.optional(S.Int),
 }) {}
 
 export class ChytridiaceaeClass extends S.Class<ChytridiaceaeClass>("ChytridiaceaeClass")({
@@ -173,31 +173,31 @@ export class AnkeeClass extends S.Class<AnkeeClass>("AnkeeClass")({
 }) {}
 
 export class Amphithyron extends S.Class<Amphithyron>("Amphithyron")({
-    "akroasis": S.optional(S.NullOr(S.Int)),
-    "antiphonical": S.optional(S.NullOr(S.Int)),
-    "basebred": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "conductometric": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "ensilation": S.optional(S.NullOr(S.Int)),
-    "eyebolt": S.optional(S.NullOr(S.Int)),
-    "fistulated": S.optional(S.NullOr(S.Int)),
-    "heteropod": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "Juniperus": S.optional(S.NullOr(S.Int)),
-    "labyrinthically": S.optional(S.NullOr(S.Int)),
-    "martyrization": S.optional(S.NullOr(S.Int)),
-    "mispolicy": S.optional(S.NullOr(S.Int)),
-    "multipara": S.optional(S.NullOr(S.Int)),
-    "Nazirite": S.optional(S.NullOr(S.Int)),
+    "akroasis": S.optional(S.Int),
+    "antiphonical": S.optional(S.Int),
+    "basebred": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "conductometric": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "ensilation": S.optional(S.Int),
+    "eyebolt": S.optional(S.Int),
+    "fistulated": S.optional(S.Int),
+    "heteropod": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "Juniperus": S.optional(S.Int),
+    "labyrinthically": S.optional(S.Int),
+    "martyrization": S.optional(S.Int),
+    "mispolicy": S.optional(S.Int),
+    "multipara": S.optional(S.Int),
+    "Nazirite": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "possessorial": S.optional(S.NullOr(S.Int)),
-    "shamed": S.optional(S.NullOr(S.Int)),
-    "shelfworn": S.optional(S.NullOr(S.Int)),
-    "stagnum": S.optional(S.NullOr(S.Int)),
-    "Those": S.optional(S.NullOr(S.Int)),
-    "undecimal": S.optional(S.NullOr(S.Int)),
+    "possessorial": S.optional(S.Int),
+    "shamed": S.optional(S.Int),
+    "shelfworn": S.optional(S.Int),
+    "stagnum": S.optional(S.Int),
+    "Those": S.optional(S.Int),
+    "undecimal": S.optional(S.Int),
 }) {}
 
 export class Rebecca extends S.Class<Rebecca>("Rebecca")({
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/combinations3.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/combinations3.json/default/TopLevel.ts
index 02be4a5..48cb91d 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/combinations3.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/combinations3.json/default/TopLevel.ts
@@ -49,18 +49,18 @@ export class PotwhiskyClass extends S.Class<PotwhiskyClass>("PotwhiskyClass")({
 
 export class Pneumocele extends S.Class<Pneumocele>("Pneumocele")({
     "Carbonarism": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
     "cineolic": S.optional(S.Null),
     "cobbly": S.optional(S.Null),
     "conchyliferous": S.optional(S.Null),
     "congregation": S.optional(S.Null),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "disdiapason": S.optional(S.String),
     "enterotomy": S.optional(S.Null),
     "entophytal": S.optional(S.Null),
     "fewtrils": S.optional(S.Null),
     "herem": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "Koniga": S.optional(S.Null),
     "meticulosity": S.optional(S.Null),
     "Micky": S.optional(S.Null),
@@ -76,31 +76,31 @@ export class Pneumocele extends S.Class<Pneumocele>("Pneumocele")({
 }) {}
 
 export class PiaculumClass extends S.Class<PiaculumClass>("PiaculumClass")({
-    "alada": S.optional(S.NullOr(S.Int)),
-    "amphistomous": S.optional(S.NullOr(S.Int)),
-    "boysenberry": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "decardinalize": S.optional(S.NullOr(S.Int)),
-    "discouragement": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "doitrified": S.optional(S.NullOr(S.Int)),
-    "hexaspermous": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "insinking": S.optional(S.NullOr(S.Int)),
-    "loathfulness": S.optional(S.NullOr(S.Int)),
-    "miasmatical": S.optional(S.NullOr(S.Int)),
-    "neurofibril": S.optional(S.NullOr(S.Int)),
+    "alada": S.optional(S.Int),
+    "amphistomous": S.optional(S.Int),
+    "boysenberry": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "decardinalize": S.optional(S.Int),
+    "discouragement": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "doitrified": S.optional(S.Int),
+    "hexaspermous": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "insinking": S.optional(S.Int),
+    "loathfulness": S.optional(S.Int),
+    "miasmatical": S.optional(S.Int),
+    "neurofibril": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "phonendoscope": S.optional(S.NullOr(S.Int)),
-    "pilferment": S.optional(S.NullOr(S.Int)),
-    "predismissory": S.optional(S.NullOr(S.Int)),
-    "preinscription": S.optional(S.NullOr(S.Int)),
-    "quotative": S.optional(S.NullOr(S.Int)),
-    "sienna": S.optional(S.NullOr(S.Int)),
-    "thorax": S.optional(S.NullOr(S.Int)),
-    "yachting": S.optional(S.NullOr(S.Int)),
-    "Zipper": S.optional(S.NullOr(S.Int)),
+    "phonendoscope": S.optional(S.Int),
+    "pilferment": S.optional(S.Int),
+    "predismissory": S.optional(S.Int),
+    "preinscription": S.optional(S.Int),
+    "quotative": S.optional(S.Int),
+    "sienna": S.optional(S.Int),
+    "thorax": S.optional(S.Int),
+    "yachting": S.optional(S.Int),
+    "Zipper": S.optional(S.Int),
 }) {}
 
 export class OutrivalClass extends S.Class<OutrivalClass>("OutrivalClass")({
@@ -159,16 +159,16 @@ export class Noncontributing extends S.Class<Noncontributing>("Noncontributing")
 
 export class MonotheisticallyClass extends S.Class<MonotheisticallyClass>("MonotheisticallyClass")({
     "blaspheme": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "catharticalness": S.optional(S.Number),
     "celiosalpingectomy": S.optional(S.Null),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "Chirotherium": S.optional(S.Int),
     "consummativeness": S.optional(S.Null),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "disdiapason": S.optional(S.String),
     "egestive": S.optional(S.Null),
     "enchylema": S.optional(S.Null),
     "gasconade": S.optional(S.Null),
     "holidayer": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "intuitionalism": S.optional(S.Null),
     "lophiostomate": S.optional(S.Null),
     "nonbookish": S.optional(S.Null),
@@ -194,79 +194,79 @@ export class MonaziteClass extends S.Class<MonaziteClass>("MonaziteClass")({
 }) {}
 
 export class Maslin extends S.Class<Maslin>("Maslin")({
-    "Alicant": S.optional(S.NullOr(S.Int)),
+    "Alicant": S.optional(S.Int),
     "antiatonement": S.optional(S.Null),
-    "anticorrosive": S.optional(S.NullOr(S.Int)),
+    "anticorrosive": S.optional(S.Int),
     "aphidozer": S.optional(S.Null),
     "Bakuninist": S.optional(S.Null),
-    "be": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "chub": S.optional(S.NullOr(S.Int)),
-    "cuprosilicon": S.optional(S.NullOr(S.Int)),
-    "curtailedly": S.optional(S.NullOr(S.Int)),
-    "dellenite": S.optional(S.NullOr(S.Int)),
-    "Dimitry": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "be": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "chub": S.optional(S.Int),
+    "cuprosilicon": S.optional(S.Int),
+    "curtailedly": S.optional(S.Int),
+    "dellenite": S.optional(S.Int),
+    "Dimitry": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
     "edifying": S.optional(S.Null),
-    "ethmoiditis": S.optional(S.NullOr(S.Int)),
+    "ethmoiditis": S.optional(S.Int),
     "gastralgy": S.optional(S.Null),
-    "goatherd": S.optional(S.NullOr(S.Int)),
-    "hammerdress": S.optional(S.NullOr(S.Int)),
+    "goatherd": S.optional(S.Int),
+    "hammerdress": S.optional(S.Int),
     "hangfire": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "lacunosity": S.optional(S.NullOr(S.Int)),
+    "homocerc": S.optional(S.Boolean),
+    "lacunosity": S.optional(S.Int),
     "longiloquence": S.optional(S.Null),
-    "mameliere": S.optional(S.NullOr(S.Int)),
+    "mameliere": S.optional(S.Int),
     "motherless": S.optional(S.Null),
     "nonbookish": S.optional(S.Null),
     "noncorrodible": S.optional(S.Null),
     "nonsensicality": S.optional(S.Null),
-    "oafishly": S.optional(S.NullOr(S.Int)),
+    "oafishly": S.optional(S.Int),
     "pfund": S.optional(S.Null),
     "preadvisory": S.optional(S.Null),
     "retroflexed": S.optional(S.Null),
-    "saccharulmic": S.optional(S.NullOr(S.Int)),
-    "scowlful": S.optional(S.NullOr(S.Int)),
+    "saccharulmic": S.optional(S.Int),
+    "scowlful": S.optional(S.Int),
     "secluded": S.optional(S.Null),
     "slackage": S.optional(S.Null),
-    "sphaeridial": S.optional(S.NullOr(S.Int)),
+    "sphaeridial": S.optional(S.Int),
     "spondulics": S.optional(S.Null),
-    "subsecive": S.optional(S.NullOr(S.Int)),
+    "subsecive": S.optional(S.Int),
     "swellmobsman": S.optional(S.Null),
-    "trachyglossate": S.optional(S.NullOr(S.Int)),
+    "trachyglossate": S.optional(S.Int),
     "trialogue": S.optional(S.Null),
-    "unassuaged": S.optional(S.NullOr(S.Int)),
+    "unassuaged": S.optional(S.Int),
     "ungross": S.optional(S.Null),
     "unjudiciously": S.optional(S.Null),
 }) {}
 
 export class LupusClass extends S.Class<LupusClass>("LupusClass")({
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "Chlorioninae": S.optional(S.NullOr(S.Int)),
-    "Corvinae": S.optional(S.NullOr(S.Int)),
-    "Crassina": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "exiguity": S.optional(S.NullOr(S.Int)),
-    "farcist": S.optional(S.NullOr(S.Int)),
-    "holographical": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "ichthyophagan": S.optional(S.NullOr(S.Int)),
-    "implacable": S.optional(S.NullOr(S.Int)),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "Chlorioninae": S.optional(S.Int),
+    "Corvinae": S.optional(S.Int),
+    "Crassina": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "exiguity": S.optional(S.Int),
+    "farcist": S.optional(S.Int),
+    "holographical": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "ichthyophagan": S.optional(S.Int),
+    "implacable": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "outshiner": S.optional(S.NullOr(S.Int)),
-    "overweather": S.optional(S.NullOr(S.Int)),
-    "protonegroid": S.optional(S.NullOr(S.Int)),
-    "shallowish": S.optional(S.NullOr(S.Int)),
-    "snoke": S.optional(S.NullOr(S.Int)),
-    "snout": S.optional(S.NullOr(S.Int)),
-    "surveillance": S.optional(S.NullOr(S.Int)),
-    "threshingtime": S.optional(S.NullOr(S.Int)),
-    "Thysanocarpus": S.optional(S.NullOr(S.Int)),
-    "unsignificantly": S.optional(S.NullOr(S.Int)),
-    "unsnap": S.optional(S.NullOr(S.Int)),
-    "vendible": S.optional(S.NullOr(S.Int)),
+    "outshiner": S.optional(S.Int),
+    "overweather": S.optional(S.Int),
+    "protonegroid": S.optional(S.Int),
+    "shallowish": S.optional(S.Int),
+    "snoke": S.optional(S.Int),
+    "snout": S.optional(S.Int),
+    "surveillance": S.optional(S.Int),
+    "threshingtime": S.optional(S.Int),
+    "Thysanocarpus": S.optional(S.Int),
+    "unsignificantly": S.optional(S.Int),
+    "unsnap": S.optional(S.Int),
+    "vendible": S.optional(S.Int),
 }) {}
 
 export class LandlubberlyClass extends S.Class<LandlubberlyClass>("LandlubberlyClass")({
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/combinations3.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/combinations3.json/just-schema-true--8c4ca457bcba/TopLevel.ts
index 02be4a5..48cb91d 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/combinations3.json/just-schema-true--8c4ca457bcba/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/combinations3.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -49,18 +49,18 @@ export class PotwhiskyClass extends S.Class<PotwhiskyClass>("PotwhiskyClass")({
 
 export class Pneumocele extends S.Class<Pneumocele>("Pneumocele")({
     "Carbonarism": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
     "cineolic": S.optional(S.Null),
     "cobbly": S.optional(S.Null),
     "conchyliferous": S.optional(S.Null),
     "congregation": S.optional(S.Null),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "disdiapason": S.optional(S.String),
     "enterotomy": S.optional(S.Null),
     "entophytal": S.optional(S.Null),
     "fewtrils": S.optional(S.Null),
     "herem": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "Koniga": S.optional(S.Null),
     "meticulosity": S.optional(S.Null),
     "Micky": S.optional(S.Null),
@@ -76,31 +76,31 @@ export class Pneumocele extends S.Class<Pneumocele>("Pneumocele")({
 }) {}
 
 export class PiaculumClass extends S.Class<PiaculumClass>("PiaculumClass")({
-    "alada": S.optional(S.NullOr(S.Int)),
-    "amphistomous": S.optional(S.NullOr(S.Int)),
-    "boysenberry": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "decardinalize": S.optional(S.NullOr(S.Int)),
-    "discouragement": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "doitrified": S.optional(S.NullOr(S.Int)),
-    "hexaspermous": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "insinking": S.optional(S.NullOr(S.Int)),
-    "loathfulness": S.optional(S.NullOr(S.Int)),
-    "miasmatical": S.optional(S.NullOr(S.Int)),
-    "neurofibril": S.optional(S.NullOr(S.Int)),
+    "alada": S.optional(S.Int),
+    "amphistomous": S.optional(S.Int),
+    "boysenberry": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "decardinalize": S.optional(S.Int),
+    "discouragement": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "doitrified": S.optional(S.Int),
+    "hexaspermous": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "insinking": S.optional(S.Int),
+    "loathfulness": S.optional(S.Int),
+    "miasmatical": S.optional(S.Int),
+    "neurofibril": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "phonendoscope": S.optional(S.NullOr(S.Int)),
-    "pilferment": S.optional(S.NullOr(S.Int)),
-    "predismissory": S.optional(S.NullOr(S.Int)),
-    "preinscription": S.optional(S.NullOr(S.Int)),
-    "quotative": S.optional(S.NullOr(S.Int)),
-    "sienna": S.optional(S.NullOr(S.Int)),
-    "thorax": S.optional(S.NullOr(S.Int)),
-    "yachting": S.optional(S.NullOr(S.Int)),
-    "Zipper": S.optional(S.NullOr(S.Int)),
+    "phonendoscope": S.optional(S.Int),
+    "pilferment": S.optional(S.Int),
+    "predismissory": S.optional(S.Int),
+    "preinscription": S.optional(S.Int),
+    "quotative": S.optional(S.Int),
+    "sienna": S.optional(S.Int),
+    "thorax": S.optional(S.Int),
+    "yachting": S.optional(S.Int),
+    "Zipper": S.optional(S.Int),
 }) {}
 
 export class OutrivalClass extends S.Class<OutrivalClass>("OutrivalClass")({
@@ -159,16 +159,16 @@ export class Noncontributing extends S.Class<Noncontributing>("Noncontributing")
 
 export class MonotheisticallyClass extends S.Class<MonotheisticallyClass>("MonotheisticallyClass")({
     "blaspheme": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "catharticalness": S.optional(S.Number),
     "celiosalpingectomy": S.optional(S.Null),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "Chirotherium": S.optional(S.Int),
     "consummativeness": S.optional(S.Null),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "disdiapason": S.optional(S.String),
     "egestive": S.optional(S.Null),
     "enchylema": S.optional(S.Null),
     "gasconade": S.optional(S.Null),
     "holidayer": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "intuitionalism": S.optional(S.Null),
     "lophiostomate": S.optional(S.Null),
     "nonbookish": S.optional(S.Null),
@@ -194,79 +194,79 @@ export class MonaziteClass extends S.Class<MonaziteClass>("MonaziteClass")({
 }) {}
 
 export class Maslin extends S.Class<Maslin>("Maslin")({
-    "Alicant": S.optional(S.NullOr(S.Int)),
+    "Alicant": S.optional(S.Int),
     "antiatonement": S.optional(S.Null),
-    "anticorrosive": S.optional(S.NullOr(S.Int)),
+    "anticorrosive": S.optional(S.Int),
     "aphidozer": S.optional(S.Null),
     "Bakuninist": S.optional(S.Null),
-    "be": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "chub": S.optional(S.NullOr(S.Int)),
-    "cuprosilicon": S.optional(S.NullOr(S.Int)),
-    "curtailedly": S.optional(S.NullOr(S.Int)),
-    "dellenite": S.optional(S.NullOr(S.Int)),
-    "Dimitry": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "be": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "chub": S.optional(S.Int),
+    "cuprosilicon": S.optional(S.Int),
+    "curtailedly": S.optional(S.Int),
+    "dellenite": S.optional(S.Int),
+    "Dimitry": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
     "edifying": S.optional(S.Null),
-    "ethmoiditis": S.optional(S.NullOr(S.Int)),
+    "ethmoiditis": S.optional(S.Int),
     "gastralgy": S.optional(S.Null),
-    "goatherd": S.optional(S.NullOr(S.Int)),
-    "hammerdress": S.optional(S.NullOr(S.Int)),
+    "goatherd": S.optional(S.Int),
+    "hammerdress": S.optional(S.Int),
     "hangfire": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "lacunosity": S.optional(S.NullOr(S.Int)),
+    "homocerc": S.optional(S.Boolean),
+    "lacunosity": S.optional(S.Int),
     "longiloquence": S.optional(S.Null),
-    "mameliere": S.optional(S.NullOr(S.Int)),
+    "mameliere": S.optional(S.Int),
     "motherless": S.optional(S.Null),
     "nonbookish": S.optional(S.Null),
     "noncorrodible": S.optional(S.Null),
     "nonsensicality": S.optional(S.Null),
-    "oafishly": S.optional(S.NullOr(S.Int)),
+    "oafishly": S.optional(S.Int),
     "pfund": S.optional(S.Null),
     "preadvisory": S.optional(S.Null),
     "retroflexed": S.optional(S.Null),
-    "saccharulmic": S.optional(S.NullOr(S.Int)),
-    "scowlful": S.optional(S.NullOr(S.Int)),
+    "saccharulmic": S.optional(S.Int),
+    "scowlful": S.optional(S.Int),
     "secluded": S.optional(S.Null),
     "slackage": S.optional(S.Null),
-    "sphaeridial": S.optional(S.NullOr(S.Int)),
+    "sphaeridial": S.optional(S.Int),
     "spondulics": S.optional(S.Null),
-    "subsecive": S.optional(S.NullOr(S.Int)),
+    "subsecive": S.optional(S.Int),
     "swellmobsman": S.optional(S.Null),
-    "trachyglossate": S.optional(S.NullOr(S.Int)),
+    "trachyglossate": S.optional(S.Int),
     "trialogue": S.optional(S.Null),
-    "unassuaged": S.optional(S.NullOr(S.Int)),
+    "unassuaged": S.optional(S.Int),
     "ungross": S.optional(S.Null),
     "unjudiciously": S.optional(S.Null),
 }) {}
 
 export class LupusClass extends S.Class<LupusClass>("LupusClass")({
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "Chlorioninae": S.optional(S.NullOr(S.Int)),
-    "Corvinae": S.optional(S.NullOr(S.Int)),
-    "Crassina": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "exiguity": S.optional(S.NullOr(S.Int)),
-    "farcist": S.optional(S.NullOr(S.Int)),
-    "holographical": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "ichthyophagan": S.optional(S.NullOr(S.Int)),
-    "implacable": S.optional(S.NullOr(S.Int)),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "Chlorioninae": S.optional(S.Int),
+    "Corvinae": S.optional(S.Int),
+    "Crassina": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "exiguity": S.optional(S.Int),
+    "farcist": S.optional(S.Int),
+    "holographical": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "ichthyophagan": S.optional(S.Int),
+    "implacable": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "outshiner": S.optional(S.NullOr(S.Int)),
-    "overweather": S.optional(S.NullOr(S.Int)),
-    "protonegroid": S.optional(S.NullOr(S.Int)),
-    "shallowish": S.optional(S.NullOr(S.Int)),
-    "snoke": S.optional(S.NullOr(S.Int)),
-    "snout": S.optional(S.NullOr(S.Int)),
-    "surveillance": S.optional(S.NullOr(S.Int)),
-    "threshingtime": S.optional(S.NullOr(S.Int)),
-    "Thysanocarpus": S.optional(S.NullOr(S.Int)),
-    "unsignificantly": S.optional(S.NullOr(S.Int)),
-    "unsnap": S.optional(S.NullOr(S.Int)),
-    "vendible": S.optional(S.NullOr(S.Int)),
+    "outshiner": S.optional(S.Int),
+    "overweather": S.optional(S.Int),
+    "protonegroid": S.optional(S.Int),
+    "shallowish": S.optional(S.Int),
+    "snoke": S.optional(S.Int),
+    "snout": S.optional(S.Int),
+    "surveillance": S.optional(S.Int),
+    "threshingtime": S.optional(S.Int),
+    "Thysanocarpus": S.optional(S.Int),
+    "unsignificantly": S.optional(S.Int),
+    "unsnap": S.optional(S.Int),
+    "vendible": S.optional(S.Int),
 }) {}
 
 export class LandlubberlyClass extends S.Class<LandlubberlyClass>("LandlubberlyClass")({
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/combinations4.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/combinations4.json/default/TopLevel.ts
index 3a1909c..d7555c4 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/combinations4.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/combinations4.json/default/TopLevel.ts
@@ -48,48 +48,48 @@ export class UnstressedClass extends S.Class<UnstressedClass>("UnstressedClass")
 }) {}
 
 export class UnimpeachablyClass extends S.Class<UnimpeachablyClass>("UnimpeachablyClass")({
-    "acerin": S.optional(S.NullOr(S.Int)),
-    "Bobadil": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "chlorophylligenous": S.optional(S.NullOr(S.Int)),
-    "conversational": S.optional(S.NullOr(S.Int)),
-    "demiowl": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "ectorhinal": S.optional(S.NullOr(S.Int)),
-    "gamblesomeness": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "irrorate": S.optional(S.NullOr(S.Int)),
-    "kindergartening": S.optional(S.NullOr(S.Int)),
-    "lateritic": S.optional(S.NullOr(S.Int)),
-    "mespil": S.optional(S.NullOr(S.Int)),
-    "misconfiguration": S.optional(S.NullOr(S.Int)),
+    "acerin": S.optional(S.Int),
+    "Bobadil": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "chlorophylligenous": S.optional(S.Int),
+    "conversational": S.optional(S.Int),
+    "demiowl": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "ectorhinal": S.optional(S.Int),
+    "gamblesomeness": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "irrorate": S.optional(S.Int),
+    "kindergartening": S.optional(S.Int),
+    "lateritic": S.optional(S.Int),
+    "mespil": S.optional(S.Int),
+    "misconfiguration": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "planometry": S.optional(S.NullOr(S.Int)),
-    "Quiina": S.optional(S.NullOr(S.Int)),
-    "Robert": S.optional(S.NullOr(S.Int)),
-    "rot": S.optional(S.NullOr(S.Int)),
-    "subcinctorium": S.optional(S.NullOr(S.Int)),
-    "tussocker": S.optional(S.NullOr(S.Int)),
-    "ultraproud": S.optional(S.NullOr(S.Int)),
-    "unsuggestedness": S.optional(S.NullOr(S.Int)),
+    "planometry": S.optional(S.Int),
+    "Quiina": S.optional(S.Int),
+    "Robert": S.optional(S.Int),
+    "rot": S.optional(S.Int),
+    "subcinctorium": S.optional(S.Int),
+    "tussocker": S.optional(S.Int),
+    "ultraproud": S.optional(S.Int),
+    "unsuggestedness": S.optional(S.Int),
 }) {}
 
 export class TruantcyClass extends S.Class<TruantcyClass>("TruantcyClass")({
     "alfiona": S.optional(S.Null),
     "ascaridiasis": S.optional(S.Null),
     "bungey": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "catharticalness": S.optional(S.Number),
     "ceroxyle": S.optional(S.Null),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "Chirotherium": S.optional(S.Int),
     "chorology": S.optional(S.Null),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "disdiapason": S.optional(S.String),
     "enmarble": S.optional(S.Null),
     "Epeira": S.optional(S.Null),
     "Eurylaimi": S.optional(S.Null),
     "germination": S.optional(S.Null),
     "hallelujah": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "lev": S.optional(S.Null),
     "mouthing": S.optional(S.Null),
     "nonbookish": S.optional(S.Null),
@@ -104,59 +104,59 @@ export class TruantcyClass extends S.Class<TruantcyClass>("TruantcyClass")({
 }) {}
 
 export class StrenuosityClass extends S.Class<StrenuosityClass>("StrenuosityClass")({
-    "bliss": S.optional(S.NullOr(S.Int)),
-    "buccate": S.optional(S.NullOr(S.Int)),
-    "bulletproof": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "crumblingness": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "engagedly": S.optional(S.NullOr(S.Int)),
-    "fightable": S.optional(S.NullOr(S.Int)),
-    "hoariness": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "hypopodium": S.optional(S.NullOr(S.Int)),
-    "luxurist": S.optional(S.NullOr(S.Int)),
-    "mechanician": S.optional(S.NullOr(S.Int)),
+    "bliss": S.optional(S.Int),
+    "buccate": S.optional(S.Int),
+    "bulletproof": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "crumblingness": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "engagedly": S.optional(S.Int),
+    "fightable": S.optional(S.Int),
+    "hoariness": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "hypopodium": S.optional(S.Int),
+    "luxurist": S.optional(S.Int),
+    "mechanician": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "Onopordon": S.optional(S.NullOr(S.Int)),
-    "podgily": S.optional(S.NullOr(S.Int)),
-    "reformableness": S.optional(S.NullOr(S.Int)),
-    "scatterbrains": S.optional(S.NullOr(S.Int)),
-    "seminuria": S.optional(S.NullOr(S.Int)),
-    "Sodomite": S.optional(S.NullOr(S.Int)),
-    "tramp": S.optional(S.NullOr(S.Int)),
-    "undueness": S.optional(S.NullOr(S.Int)),
-    "worthily": S.optional(S.NullOr(S.Int)),
-    "Yankeeist": S.optional(S.NullOr(S.Int)),
+    "Onopordon": S.optional(S.Int),
+    "podgily": S.optional(S.Int),
+    "reformableness": S.optional(S.Int),
+    "scatterbrains": S.optional(S.Int),
+    "seminuria": S.optional(S.Int),
+    "Sodomite": S.optional(S.Int),
+    "tramp": S.optional(S.Int),
+    "undueness": S.optional(S.Int),
+    "worthily": S.optional(S.Int),
+    "Yankeeist": S.optional(S.Int),
 }) {}
 
 export class Staghunting extends S.Class<Staghunting>("Staghunting")({
-    "calorimetric": S.optional(S.NullOr(S.Int)),
-    "canid": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "ditriglyphic": S.optional(S.NullOr(S.Int)),
-    "floriferousness": S.optional(S.NullOr(S.Int)),
-    "gamelike": S.optional(S.NullOr(S.Int)),
-    "grig": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "interloan": S.optional(S.NullOr(S.Int)),
-    "lithotomy": S.optional(S.NullOr(S.Int)),
-    "loric": S.optional(S.NullOr(S.Int)),
-    "membranocoriaceous": S.optional(S.NullOr(S.Int)),
-    "membranogenic": S.optional(S.NullOr(S.Int)),
+    "calorimetric": S.optional(S.Int),
+    "canid": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "ditriglyphic": S.optional(S.Int),
+    "floriferousness": S.optional(S.Int),
+    "gamelike": S.optional(S.Int),
+    "grig": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "interloan": S.optional(S.Int),
+    "lithotomy": S.optional(S.Int),
+    "loric": S.optional(S.Int),
+    "membranocoriaceous": S.optional(S.Int),
+    "membranogenic": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "overtrump": S.optional(S.NullOr(S.Int)),
-    "scotino": S.optional(S.NullOr(S.Int)),
-    "seasonable": S.optional(S.NullOr(S.Int)),
-    "sephen": S.optional(S.NullOr(S.Int)),
-    "stigmarioid": S.optional(S.NullOr(S.Int)),
-    "tired": S.optional(S.NullOr(S.Int)),
-    "trifid": S.optional(S.NullOr(S.Int)),
-    "undefeatedly": S.optional(S.NullOr(S.Int)),
-    "ungirlish": S.optional(S.NullOr(S.Int)),
+    "overtrump": S.optional(S.Int),
+    "scotino": S.optional(S.Int),
+    "seasonable": S.optional(S.Int),
+    "sephen": S.optional(S.Int),
+    "stigmarioid": S.optional(S.Int),
+    "tired": S.optional(S.Int),
+    "trifid": S.optional(S.Int),
+    "undefeatedly": S.optional(S.Int),
+    "ungirlish": S.optional(S.Int),
 }) {}
 
 export class SisteringClass extends S.Class<SisteringClass>("SisteringClass")({
@@ -208,13 +208,13 @@ export class Scatty extends S.Class<Scatty>("Scatty")({
 export class SaxtenClass extends S.Class<SaxtenClass>("SaxtenClass")({
     "algarrobilla": S.optional(S.Null),
     "bowgrace": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "catharticalness": S.optional(S.Number),
     "Centaurid": S.optional(S.Null),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "Chirotherium": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
     "flix": S.optional(S.Null),
     "germanely": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "inhume": S.optional(S.Null),
     "lepidote": S.optional(S.Null),
     "megalochirous": S.optional(S.Null),
@@ -306,16 +306,16 @@ export class Reimagine extends S.Class<Reimagine>("Reimagine")({
     "adducible": S.optional(S.Null),
     "anabolin": S.optional(S.Null),
     "brainy": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
     "chrysamine": S.optional(S.Null),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "disdiapason": S.optional(S.String),
     "fluxweed": S.optional(S.Null),
     "glaucine": S.optional(S.Null),
     "grobianism": S.optional(S.Null),
     "Hermo": S.optional(S.Null),
     "hieroglyphist": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "icteroid": S.optional(S.Null),
     "immortal": S.optional(S.Null),
     "impetulant": S.optional(S.Null),
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/combinations4.json/just-schema-true--8c4ca457bcba/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/combinations4.json/just-schema-true--8c4ca457bcba/TopLevel.ts
index 3a1909c..d7555c4 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/combinations4.json/just-schema-true--8c4ca457bcba/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/combinations4.json/just-schema-true--8c4ca457bcba/TopLevel.ts
@@ -48,48 +48,48 @@ export class UnstressedClass extends S.Class<UnstressedClass>("UnstressedClass")
 }) {}
 
 export class UnimpeachablyClass extends S.Class<UnimpeachablyClass>("UnimpeachablyClass")({
-    "acerin": S.optional(S.NullOr(S.Int)),
-    "Bobadil": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "chlorophylligenous": S.optional(S.NullOr(S.Int)),
-    "conversational": S.optional(S.NullOr(S.Int)),
-    "demiowl": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "ectorhinal": S.optional(S.NullOr(S.Int)),
-    "gamblesomeness": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "irrorate": S.optional(S.NullOr(S.Int)),
-    "kindergartening": S.optional(S.NullOr(S.Int)),
-    "lateritic": S.optional(S.NullOr(S.Int)),
-    "mespil": S.optional(S.NullOr(S.Int)),
-    "misconfiguration": S.optional(S.NullOr(S.Int)),
+    "acerin": S.optional(S.Int),
+    "Bobadil": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "chlorophylligenous": S.optional(S.Int),
+    "conversational": S.optional(S.Int),
+    "demiowl": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "ectorhinal": S.optional(S.Int),
+    "gamblesomeness": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "irrorate": S.optional(S.Int),
+    "kindergartening": S.optional(S.Int),
+    "lateritic": S.optional(S.Int),
+    "mespil": S.optional(S.Int),
+    "misconfiguration": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "planometry": S.optional(S.NullOr(S.Int)),
-    "Quiina": S.optional(S.NullOr(S.Int)),
-    "Robert": S.optional(S.NullOr(S.Int)),
-    "rot": S.optional(S.NullOr(S.Int)),
-    "subcinctorium": S.optional(S.NullOr(S.Int)),
-    "tussocker": S.optional(S.NullOr(S.Int)),
-    "ultraproud": S.optional(S.NullOr(S.Int)),
-    "unsuggestedness": S.optional(S.NullOr(S.Int)),
+    "planometry": S.optional(S.Int),
+    "Quiina": S.optional(S.Int),
+    "Robert": S.optional(S.Int),
+    "rot": S.optional(S.Int),
+    "subcinctorium": S.optional(S.Int),
+    "tussocker": S.optional(S.Int),
+    "ultraproud": S.optional(S.Int),
+    "unsuggestedness": S.optional(S.Int),
 }) {}
 
 export class TruantcyClass extends S.Class<TruantcyClass>("TruantcyClass")({
     "alfiona": S.optional(S.Null),
     "ascaridiasis": S.optional(S.Null),
     "bungey": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "catharticalness": S.optional(S.Number),
     "ceroxyle": S.optional(S.Null),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "Chirotherium": S.optional(S.Int),
     "chorology": S.optional(S.Null),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "disdiapason": S.optional(S.String),
     "enmarble": S.optional(S.Null),
     "Epeira": S.optional(S.Null),
     "Eurylaimi": S.optional(S.Null),
     "germination": S.optional(S.Null),
     "hallelujah": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "lev": S.optional(S.Null),
     "mouthing": S.optional(S.Null),
     "nonbookish": S.optional(S.Null),
@@ -104,59 +104,59 @@ export class TruantcyClass extends S.Class<TruantcyClass>("TruantcyClass")({
 }) {}
 
 export class StrenuosityClass extends S.Class<StrenuosityClass>("StrenuosityClass")({
-    "bliss": S.optional(S.NullOr(S.Int)),
-    "buccate": S.optional(S.NullOr(S.Int)),
-    "bulletproof": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "crumblingness": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "engagedly": S.optional(S.NullOr(S.Int)),
-    "fightable": S.optional(S.NullOr(S.Int)),
-    "hoariness": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "hypopodium": S.optional(S.NullOr(S.Int)),
-    "luxurist": S.optional(S.NullOr(S.Int)),
-    "mechanician": S.optional(S.NullOr(S.Int)),
+    "bliss": S.optional(S.Int),
+    "buccate": S.optional(S.Int),
+    "bulletproof": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "crumblingness": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "engagedly": S.optional(S.Int),
+    "fightable": S.optional(S.Int),
+    "hoariness": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "hypopodium": S.optional(S.Int),
+    "luxurist": S.optional(S.Int),
+    "mechanician": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "Onopordon": S.optional(S.NullOr(S.Int)),
-    "podgily": S.optional(S.NullOr(S.Int)),
-    "reformableness": S.optional(S.NullOr(S.Int)),
-    "scatterbrains": S.optional(S.NullOr(S.Int)),
-    "seminuria": S.optional(S.NullOr(S.Int)),
-    "Sodomite": S.optional(S.NullOr(S.Int)),
-    "tramp": S.optional(S.NullOr(S.Int)),
-    "undueness": S.optional(S.NullOr(S.Int)),
-    "worthily": S.optional(S.NullOr(S.Int)),
-    "Yankeeist": S.optional(S.NullOr(S.Int)),
+    "Onopordon": S.optional(S.Int),
+    "podgily": S.optional(S.Int),
+    "reformableness": S.optional(S.Int),
+    "scatterbrains": S.optional(S.Int),
+    "seminuria": S.optional(S.Int),
+    "Sodomite": S.optional(S.Int),
+    "tramp": S.optional(S.Int),
+    "undueness": S.optional(S.Int),
+    "worthily": S.optional(S.Int),
+    "Yankeeist": S.optional(S.Int),
 }) {}
 
 export class Staghunting extends S.Class<Staghunting>("Staghunting")({
-    "calorimetric": S.optional(S.NullOr(S.Int)),
-    "canid": S.optional(S.NullOr(S.Int)),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
-    "ditriglyphic": S.optional(S.NullOr(S.Int)),
-    "floriferousness": S.optional(S.NullOr(S.Int)),
-    "gamelike": S.optional(S.NullOr(S.Int)),
-    "grig": S.optional(S.NullOr(S.Int)),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
-    "interloan": S.optional(S.NullOr(S.Int)),
-    "lithotomy": S.optional(S.NullOr(S.Int)),
-    "loric": S.optional(S.NullOr(S.Int)),
-    "membranocoriaceous": S.optional(S.NullOr(S.Int)),
-    "membranogenic": S.optional(S.NullOr(S.Int)),
+    "calorimetric": S.optional(S.Int),
+    "canid": S.optional(S.Int),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
+    "ditriglyphic": S.optional(S.Int),
+    "floriferousness": S.optional(S.Int),
+    "gamelike": S.optional(S.Int),
+    "grig": S.optional(S.Int),
+    "homocerc": S.optional(S.Boolean),
+    "interloan": S.optional(S.Int),
+    "lithotomy": S.optional(S.Int),
+    "loric": S.optional(S.Int),
+    "membranocoriaceous": S.optional(S.Int),
+    "membranogenic": S.optional(S.Int),
     "nonbookish": S.optional(S.Null),
-    "overtrump": S.optional(S.NullOr(S.Int)),
-    "scotino": S.optional(S.NullOr(S.Int)),
-    "seasonable": S.optional(S.NullOr(S.Int)),
-    "sephen": S.optional(S.NullOr(S.Int)),
-    "stigmarioid": S.optional(S.NullOr(S.Int)),
-    "tired": S.optional(S.NullOr(S.Int)),
-    "trifid": S.optional(S.NullOr(S.Int)),
-    "undefeatedly": S.optional(S.NullOr(S.Int)),
-    "ungirlish": S.optional(S.NullOr(S.Int)),
+    "overtrump": S.optional(S.Int),
+    "scotino": S.optional(S.Int),
+    "seasonable": S.optional(S.Int),
+    "sephen": S.optional(S.Int),
+    "stigmarioid": S.optional(S.Int),
+    "tired": S.optional(S.Int),
+    "trifid": S.optional(S.Int),
+    "undefeatedly": S.optional(S.Int),
+    "ungirlish": S.optional(S.Int),
 }) {}
 
 export class SisteringClass extends S.Class<SisteringClass>("SisteringClass")({
@@ -208,13 +208,13 @@ export class Scatty extends S.Class<Scatty>("Scatty")({
 export class SaxtenClass extends S.Class<SaxtenClass>("SaxtenClass")({
     "algarrobilla": S.optional(S.Null),
     "bowgrace": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
+    "catharticalness": S.optional(S.Number),
     "Centaurid": S.optional(S.Null),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "Chirotherium": S.optional(S.Int),
+    "disdiapason": S.optional(S.String),
     "flix": S.optional(S.Null),
     "germanely": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "inhume": S.optional(S.Null),
     "lepidote": S.optional(S.Null),
     "megalochirous": S.optional(S.Null),
@@ -306,16 +306,16 @@ export class Reimagine extends S.Class<Reimagine>("Reimagine")({
     "adducible": S.optional(S.Null),
     "anabolin": S.optional(S.Null),
     "brainy": S.optional(S.Null),
-    "catharticalness": S.optional(S.NullOr(S.Number)),
-    "Chirotherium": S.optional(S.NullOr(S.Int)),
+    "catharticalness": S.optional(S.Number),
+    "Chirotherium": S.optional(S.Int),
     "chrysamine": S.optional(S.Null),
-    "disdiapason": S.optional(S.NullOr(S.String)),
+    "disdiapason": S.optional(S.String),
     "fluxweed": S.optional(S.Null),
     "glaucine": S.optional(S.Null),
     "grobianism": S.optional(S.Null),
     "Hermo": S.optional(S.Null),
     "hieroglyphist": S.optional(S.Null),
-    "homocerc": S.optional(S.NullOr(S.Boolean)),
+    "homocerc": S.optional(S.Boolean),
     "icteroid": S.optional(S.Null),
     "immortal": S.optional(S.Null),
     "impetulant": S.optional(S.Null),
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/direct-recursive.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/direct-recursive.json/default/TopLevel.ts
index 3885bfd..1c3f083 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/direct-recursive.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/direct-recursive.json/default/TopLevel.ts
@@ -2,7 +2,7 @@ import * as S from "effect/Schema";
 
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "also": S.optional(S.NullOr(S.suspend(() => TopLevel))),
+    "also": S.optional(S.suspend(() => TopLevel)),
     "bar": S.Boolean,
     "foo": S.Int,
     "moo": S.Number,
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/empty-enum.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/empty-enum.json/default/TopLevel.ts
index 15245a6..8b97401 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/empty-enum.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/empty-enum.json/default/TopLevel.ts
@@ -2,7 +2,7 @@ import * as S from "effect/Schema";
 
 
 export class Foo extends S.Class<Foo>("Foo")({
-    "bar": S.optional(S.NullOr(S.String)),
+    "bar": S.optional(S.String),
 }) {}
 
 export class TopLevel extends S.Class<TopLevel>("TopLevel")({
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts
index 6a4ec1e..a1bb03c 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/nbl-stats.json/default/TopLevel.ts
@@ -114,8 +114,8 @@ export class Comp extends S.Class<Comp>("Comp")({
 
 export class Pl extends S.Class<Pl>("Pl")({
     "active": S.Int,
-    "captain": S.optional(S.NullOr(S.Int)),
-    "comp": S.optional(S.NullOr(Comp)),
+    "captain": S.optional(S.Int),
+    "comp": S.optional(Comp),
     "eff_1": S.Int,
     "eff_2": S.Int,
     "eff_3": S.Number,
@@ -172,47 +172,39 @@ export class Time extends S.Class<Time>("Time")({
 }) {}
 
 export class Scorer extends S.Class<Scorer>("Scorer")({
-    "familyName": S.optional(S.NullOr(S.String)),
-    "familyNameInitial": S.optional(S.NullOr(FamilyNameInitial)),
-    "firstName": S.optional(S.NullOr(S.String)),
-    "firstNameInitial": S.optional(S.NullOr(FirstNameInitial)),
-    "gt": S.optional(S.NullOr(S.String)),
-    "internationalFamilyName": S.optional(S.NullOr(S.String)),
-    "internationalFamilyNameInitial": S.optional(S.NullOr(FamilyNameInitial)),
-    "internationalFirstName": S.optional(S.NullOr(S.String)),
-    "internationalFirstNameInitial": S.optional(S.NullOr(FirstNameInitial)),
-    "name": S.optional(S.NullOr(S.String)),
-    "per": S.optional(S.NullOr(S.Int)),
-    "perType": S.optional(S.NullOr(PerType)),
-    "player": S.optional(S.NullOr(S.String)),
+    "familyName": S.optional(S.String),
+    "familyNameInitial": S.optional(FamilyNameInitial),
+    "firstName": S.optional(S.String),
+    "firstNameInitial": S.optional(FirstNameInitial),
+    "gt": S.optional(S.String),
+    "internationalFamilyName": S.optional(S.String),
+    "internationalFamilyNameInitial": S.optional(FamilyNameInitial),
+    "internationalFirstName": S.optional(S.String),
+    "internationalFirstNameInitial": S.optional(FirstNameInitial),
+    "name": S.optional(S.String),
+    "per": S.optional(S.Int),
+    "perType": S.optional(PerType),
+    "player": S.optional(S.String),
     "pno": S.Int,
-    "scoreboardName": S.optional(S.NullOr(ScoreboardName)),
+    "scoreboardName": S.optional(ScoreboardName),
     "shirtNumber": S.String,
-    "summary": S.optional(S.NullOr(S.String)),
-    "times": S.optional(S.NullOr(S.Array(Time))),
+    "summary": S.optional(S.String),
+    "times": S.optional(S.Array(Time)),
     "tno": S.Int,
-    "tot": S.optional(S.NullOr(S.Int)),
-}) {}
-
-export class Totallds extends S.Class<Totallds>("Totallds")({
-    "sAssists": S.Record({ key: S.String, value: Scorer}),
-    "sBlocks": S.Record({ key: S.String, value: Scorer}),
-    "sPoints": S.Record({ key: S.String, value: Scorer}),
-    "sReboundsTotal": S.Record({ key: S.String, value: Scorer}),
-    "sSteals": S.Record({ key: S.String, value: Scorer}),
+    "tot": S.optional(S.Int),
 }) {}
 
 export class Pbp extends S.Class<Pbp>("Pbp")({
     "actionType": ActionType,
-    "familyName": S.optional(S.NullOr(S.String)),
-    "familyNameInitial": S.optional(S.NullOr(FamilyNameInitial)),
-    "firstName": S.optional(S.NullOr(S.String)),
-    "firstNameInitial": S.optional(S.NullOr(FirstNameInitial)),
+    "familyName": S.optional(S.String),
+    "familyNameInitial": S.optional(FamilyNameInitial),
+    "firstName": S.optional(S.String),
+    "firstNameInitial": S.optional(FirstNameInitial),
     "gt": S.String,
-    "internationalFamilyName": S.optional(S.NullOr(S.String)),
-    "internationalFamilyNameInitial": S.optional(S.NullOr(FamilyNameInitial)),
-    "internationalFirstName": S.optional(S.NullOr(S.String)),
-    "internationalFirstNameInitial": S.optional(S.NullOr(FirstNameInitial)),
+    "internationalFamilyName": S.optional(S.String),
+    "internationalFamilyNameInitial": S.optional(FamilyNameInitial),
+    "internationalFirstName": S.optional(S.String),
+    "internationalFirstNameInitial": S.optional(FirstNameInitial),
     "lead": S.Int,
     "period": S.Int,
     "periodType": PerType,
@@ -221,7 +213,7 @@ export class Pbp extends S.Class<Pbp>("Pbp")({
     "qualifier": S.String,
     "s1": S.Int,
     "s2": S.Int,
-    "scoreboardName": S.optional(S.NullOr(ScoreboardName)),
+    "scoreboardName": S.optional(ScoreboardName),
     "scoring": S.Int,
     "shirtNumber": S.String,
     "subType": S.String,
@@ -229,6 +221,14 @@ export class Pbp extends S.Class<Pbp>("Pbp")({
     "tno": S.Int,
 }) {}
 
+export class Totallds extends S.Class<Totallds>("Totallds")({
+    "sAssists": S.Record({ key: S.String, value: Scorer}),
+    "sBlocks": S.Record({ key: S.String, value: Scorer}),
+    "sPoints": S.Record({ key: S.String, value: Scorer}),
+    "sReboundsTotal": S.Record({ key: S.String, value: Scorer}),
+    "sSteals": S.Record({ key: S.String, value: Scorer}),
+}) {}
+
 export class Team extends S.Class<Team>("Team")({
     "teamCode": S.String,
     "teamCodeInternational": S.String,
@@ -250,6 +250,29 @@ export class Othermatch extends S.Class<Othermatch>("Othermatch")({
     "team2Score": S.Int,
 }) {}
 
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "attendance": S.Int,
+    "clock": S.String,
+    "disableMatch": S.Int,
+    "inOT": S.Int,
+    "leaddata": S.Array(S.Array(S.Union(LeaddatumEnum, S.Int))),
+    "officials_referee1": S.String,
+    "officials_referee2": S.String,
+    "officials_referee3": S.String,
+    "othermatches": S.Array(Othermatch),
+    "pbp": S.Array(Pbp),
+    "period": S.Int,
+    "periodLengthOVERTIME": S.Int,
+    "periodLengthREGULAR": S.Int,
+    "periodType": PerType,
+    "periodsMax": S.Int,
+    "scorers": S.Record({ key: S.String, value: S.Array(Scorer)}),
+    "timeline": S.Array(S.Any),
+    "tm": S.Record({ key: S.String, value: S.suspend(() => Tm)}),
+    "totalTimeAdded": S.Int,
+    "totallds": Totallds,
+}) {}
+
 export class SBlocks extends S.Class<SBlocks>("SBlocks")({
     "1": Scorer,
 }) {}
@@ -329,26 +352,3 @@ export class Tm extends S.Class<Tm>("Tm")({
     "tot_sTwoPointersMade": S.Int,
     "tot_sTwoPointersPercentage": S.Int,
 }) {}
-
-export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "attendance": S.Int,
-    "clock": S.String,
-    "disableMatch": S.Int,
-    "inOT": S.Int,
-    "leaddata": S.Array(S.Array(S.Union(LeaddatumEnum, S.Int))),
-    "officials_referee1": S.String,
-    "officials_referee2": S.String,
-    "officials_referee3": S.String,
-    "othermatches": S.Array(Othermatch),
-    "pbp": S.Array(Pbp),
-    "period": S.Int,
-    "periodLengthOVERTIME": S.Int,
-    "periodLengthREGULAR": S.Int,
-    "periodType": PerType,
-    "periodsMax": S.Int,
-    "scorers": S.Record({ key: S.String, value: S.Array(Scorer)}),
-    "timeline": S.Array(S.Any),
-    "tm": S.Record({ key: S.String, value: Tm}),
-    "totalTimeAdded": S.Int,
-    "totallds": Totallds,
-}) {}
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/optional-union.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/optional-union.json/default/TopLevel.ts
index 459e9ff..706d639 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/optional-union.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/optional-union.json/default/TopLevel.ts
@@ -2,7 +2,7 @@ import * as S from "effect/Schema";
 
 
 export class TopLevelElement extends S.Class<TopLevelElement>("TopLevelElement")({
-    "a": S.optional(S.Union(S.Int, S.String, S.Null)),
+    "a": S.optional(S.Union(S.Int, S.String)),
 }) {}
 
 export const TopLevel = S.Array(TopLevelElement);
diff --git a/base/typescript-effect-schema/test/inputs/json/priority/recursive.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/priority/recursive.json/default/TopLevel.ts
index 4707e3a..c92a1a0 100644
--- a/base/typescript-effect-schema/test/inputs/json/priority/recursive.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/priority/recursive.json/default/TopLevel.ts
@@ -1,15 +1,8 @@
 import * as S from "effect/Schema";
 
 
-export class FormatsClass extends S.Class<FormatsClass>("FormatsClass")({
-    "formats": S.optional(S.NullOr(S.Array(S.suspend(() => Format)))),
-    "height": S.Int,
-    "url": S.String,
-    "width": S.Int,
-}) {}
-
 export class Format extends S.Class<Format>("Format")({
-    "formats": FormatsClass,
+    "formats": S.suspend(() => FormatsClass),
 }) {}
 
 export class Currency extends S.Class<Currency>("Currency")({
@@ -79,7 +72,7 @@ export class ProductProduct extends S.Class<ProductProduct>("ProductProduct")({
     "quantity": S.Int,
     "rating": Rating,
     "specification": Specification,
-    "thumbnail": FormatsClass,
+    "thumbnail": S.suspend(() => FormatsClass),
     "totalsellers": S.Int,
 }) {}
 
@@ -123,3 +116,10 @@ export class TopLevel extends S.Class<TopLevel>("TopLevel")({
     "totalresultsavailable": S.Int,
     "totalresultsreturned": S.Int,
 }) {}
+
+export class FormatsClass extends S.Class<FormatsClass>("FormatsClass")({
+    "formats": S.optional(S.Array(Format)),
+    "height": S.Int,
+    "url": S.String,
+    "width": S.Int,
+}) {}
diff --git a/base/typescript-effect-schema/test/inputs/json/samples/github-events.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/samples/github-events.json/default/TopLevel.ts
index 8c53f87..dbdc00e 100644
--- a/base/typescript-effect-schema/test/inputs/json/samples/github-events.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/samples/github-events.json/default/TopLevel.ts
@@ -230,22 +230,22 @@ export class Milestone extends S.Class<Milestone>("Milestone")({
 }) {}
 
 export class Payload extends S.Class<Payload>("Payload")({
-    "action": S.optional(S.NullOr(S.String)),
-    "before": S.optional(S.NullOr(S.String)),
-    "comment": S.optional(S.NullOr(Comment)),
-    "commits": S.optional(S.NullOr(S.Array(Commit))),
-    "description": S.optional(S.NullOr(S.String)),
-    "distinct_size": S.optional(S.NullOr(S.Int)),
-    "head": S.optional(S.NullOr(S.String)),
-    "issue": S.optional(S.NullOr(S.suspend(() => Issue))),
-    "master_branch": S.optional(S.NullOr(S.String)),
-    "number": S.optional(S.NullOr(S.Int)),
-    "pull_request": S.optional(S.NullOr(PayloadPullRequest)),
-    "push_id": S.optional(S.NullOr(S.Int)),
-    "pusher_type": S.optional(S.NullOr(S.String)),
-    "ref": S.optional(S.NullOr(S.String)),
-    "ref_type": S.optional(S.NullOr(S.String)),
-    "size": S.optional(S.NullOr(S.Int)),
+    "action": S.optional(S.String),
+    "before": S.optional(S.String),
+    "comment": S.optional(Comment),
+    "commits": S.optional(S.Array(Commit)),
+    "description": S.optional(S.String),
+    "distinct_size": S.optional(S.Int),
+    "head": S.optional(S.String),
+    "issue": S.optional(S.suspend(() => Issue)),
+    "master_branch": S.optional(S.String),
+    "number": S.optional(S.Int),
+    "pull_request": S.optional(PayloadPullRequest),
+    "push_id": S.optional(S.Int),
+    "pusher_type": S.optional(S.String),
+    "ref": S.optional(S.String),
+    "ref_type": S.optional(S.String),
+    "size": S.optional(S.Int),
 }) {}
 
 export class Issue extends S.Class<Issue>("Issue")({
@@ -264,7 +264,7 @@ export class Issue extends S.Class<Issue>("Issue")({
     "locked": S.Boolean,
     "milestone": S.NullOr(Milestone),
     "number": S.Int,
-    "pull_request": S.optional(S.NullOr(IssuePullRequest)),
+    "pull_request": S.optional(IssuePullRequest),
     "repository_url": S.String,
     "state": S.String,
     "title": S.String,
@@ -275,7 +275,7 @@ export class Issue extends S.Class<Issue>("Issue")({
 
 export class Actor extends S.Class<Actor>("Actor")({
     "avatar_url": S.String,
-    "display_login": S.optional(S.NullOr(S.String)),
+    "display_login": S.optional(S.String),
     "gravatar_id": S.String,
     "id": S.Int,
     "login": S.String,
@@ -286,7 +286,7 @@ export class TopLevelElement extends S.Class<TopLevelElement>("TopLevelElement")
     "actor": Actor,
     "created_at": S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)),
     "id": S.String,
-    "org": S.optional(S.NullOr(Actor)),
+    "org": S.optional(Actor),
     "payload": Payload,
     "public": S.Boolean,
     "repo": TopLevelRepo,
diff --git a/base/typescript-effect-schema/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts
index 538740a..6f9779a 100644
--- a/base/typescript-effect-schema/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/samples/kitchen-sink.json/default/TopLevel.ts
@@ -9,7 +9,7 @@ export class PurplePerson extends S.Class<PurplePerson>("PurplePerson")({
 export class PersonElement extends S.Class<PersonElement>("PersonElement")({
     "intOrString": S.Union(S.Int, S.NumberFromString.pipe(S.int())),
     "name": S.String,
-    "optionalValue": S.optional(S.NullOr(S.Boolean)),
+    "optionalValue": S.optional(S.Boolean),
 }) {}
 
 export class DifferentThingClass extends S.Class<DifferentThingClass>("DifferentThingClass")({
diff --git a/base/typescript-effect-schema/test/inputs/json/samples/null-safe.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/samples/null-safe.json/default/TopLevel.ts
index dea40c8..6743615 100644
--- a/base/typescript-effect-schema/test/inputs/json/samples/null-safe.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/samples/null-safe.json/default/TopLevel.ts
@@ -8,8 +8,8 @@ export class Address extends S.Class<Address>("Address")({
 }) {}
 
 export class Item extends S.Class<Item>("Item")({
-    "address": S.optional(S.NullOr(Address)),
-    "created_at": S.optional(S.NullOr(S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/)))),
+    "address": S.optional(Address),
+    "created_at": S.optional(S.String.pipe(S.pattern(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/))),
     "name": S.String,
     "sex": S.NullOr(S.Int),
 }) {}
diff --git a/base/typescript-effect-schema/test/inputs/json/samples/pokedex.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/samples/pokedex.json/default/TopLevel.ts
index bf66b13..824c6d0 100644
--- a/base/typescript-effect-schema/test/inputs/json/samples/pokedex.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/samples/pokedex.json/default/TopLevel.ts
@@ -41,16 +41,16 @@ export class Evolution extends S.Class<Evolution>("Evolution")({
 export class Pokemon extends S.Class<Pokemon>("Pokemon")({
     "avg_spawns": S.Number,
     "candy": S.String,
-    "candy_count": S.optional(S.NullOr(S.Int)),
+    "candy_count": S.optional(S.Int),
     "egg": Egg,
     "height": S.String,
     "id": S.Int,
     "img": S.String,
     "multipliers": S.NullOr(S.Array(S.Number)),
     "name": S.String,
-    "next_evolution": S.optional(S.NullOr(S.Array(Evolution))),
+    "next_evolution": S.optional(S.Array(Evolution)),
     "num": S.String,
-    "prev_evolution": S.optional(S.NullOr(S.Array(Evolution))),
+    "prev_evolution": S.optional(S.Array(Evolution)),
     "spawn_chance": S.Number,
     "spawn_time": S.String,
     "type": S.Array(Type),
diff --git a/base/typescript-effect-schema/test/inputs/json/samples/reddit.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/samples/reddit.json/default/TopLevel.ts
index 3139766..faa3b00 100644
--- a/base/typescript-effect-schema/test/inputs/json/samples/reddit.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/samples/reddit.json/default/TopLevel.ts
@@ -52,11 +52,6 @@ export const Kind = S.Literal(
 );
 export type Kind = S.Schema.Type<typeof Kind>;
 
-export class Variants extends S.Class<Variants>("Variants")({
-    "gif": S.optional(S.NullOr(S.suspend(() => Gif))),
-    "mp4": S.optional(S.NullOr(S.suspend(() => Gif))),
-}) {}
-
 export class Source extends S.Class<Source>("Source")({
     "height": S.Int,
     "url": S.String,
@@ -67,7 +62,7 @@ export class Image extends S.Class<Image>("Image")({
     "id": S.String,
     "resolutions": S.Array(Source),
     "source": Source,
-    "variants": Variants,
+    "variants": S.suspend(() => Variants),
 }) {}
 
 export class Preview extends S.Class<Preview>("Preview")({
@@ -159,12 +154,17 @@ export class TopLevelData extends S.Class<TopLevelData>("TopLevelData")({
     "modhash": S.String,
 }) {}
 
+export class TopLevel extends S.Class<TopLevel>("TopLevel")({
+    "data": TopLevelData,
+    "kind": S.String,
+}) {}
+
 export class Gif extends S.Class<Gif>("Gif")({
     "resolutions": S.Array(Source),
     "source": Source,
 }) {}
 
-export class TopLevel extends S.Class<TopLevel>("TopLevel")({
-    "data": TopLevelData,
-    "kind": S.String,
+export class Variants extends S.Class<Variants>("Variants")({
+    "gif": S.optional(Gif),
+    "mp4": S.optional(Gif),
 }) {}
diff --git a/base/typescript-effect-schema/test/inputs/json/samples/us-senators.json/default/TopLevel.ts b/head/typescript-effect-schema/test/inputs/json/samples/us-senators.json/default/TopLevel.ts
index 97a1c37..93d48f7 100644
--- a/base/typescript-effect-schema/test/inputs/json/samples/us-senators.json/default/TopLevel.ts
+++ b/head/typescript-effect-schema/test/inputs/json/samples/us-senators.json/default/TopLevel.ts
@@ -101,9 +101,9 @@ export class Person extends S.Class<Person>("Person")({
 export class Extra extends S.Class<Extra>("Extra")({
     "address": S.String,
     "contact_form": S.String,
-    "fax": S.optional(S.NullOr(S.String)),
+    "fax": S.optional(S.String),
     "office": S.String,
-    "rss_url": S.optional(S.NullOr(S.String)),
+    "rss_url": S.optional(S.String),
 }) {}
 
 export class ObjectElement extends S.Class<ObjectElement>("ObjectElement")({
