schema-dts
Use this skill when work touches schema-dts TypeScript types for Schema.org JSON-LD: building structured data objects, injecting <script type="application/ld+json">, multi-typed nodes, @graph documents, action input/output constraints, or regenerating typings with schema-dts-gen.
Workflow
- Inspect the local surface before changing code:
- Packages:
schema-dts(and optionallyschema-dts-gen,schema-dts-lib,react-schemaorg). - Version: target v2 (
2.0.0= Schema.org v30). Treat1.xas legacy. - Role: type-only compile-time checking (no runtime Schema.org validation).
- Shape: single
WithContext<T>node vsGraphwith@idstubs vs multi-@typeviaMergeLeafTypes. - Injection path: React/
react-schemaorg, NextScript, Astro/set:html, Svelte head, or vanilla DOM.
- Packages:
- Refresh docs when the user asks for latest behavior, the installed major is unclear, or work touches v2 helpers / generator output. Start from source-map.md.
- For install,
WithContext,Thingdiscrimination, DataTypes, and type-only imports, use setup-core.md. - For
Graph,IdReference,*Leaf,MergeLeafTypes, andWithActionConstraints, use graphs-merge-actions.md. - For common page schemas, XSS-safe serialization, and framework wiring, use patterns-frameworks.md.
- For
schema-dts-genCLI / programmatic generation and v1→v2 breaks, use generator-migration.md. - Implement in the existing project style:
- Prefer
import type { … } from 'schema-dts'. - Put
@context: 'https://schema.org'only on the document root (WithContextorGraph). - Prefer
bun/bunxin command examples when adding packages or running the generator.
- Prefer
Judgment
- Types only.
schema-dtscatches wrong@type/ unknown properties at compile time. It does not validate against Google Rich Results or Schema.org at runtime. - Ship core Schema.org from the prebuilt package. Pending / experimental layers need a custom
schema-dts-genrun, not hand-rolledascasts. - Always use
WithContext<T>(orGraph) for the top-level JSON-LD document so@contextis required and locked tohttps://schema.org. - Prefer the narrowest type that matches the page (
Product,Article,FAQPage) over typing everything asThing. - Use
*Leaf+MergeLeafTypesonly when@typeis genuinely an array of concrete types. Never pass union aliases likeProductintoMergeLeafTypes. - Cross-link repeated entities with
@id+IdReferencestubs inside aGraphinstead of duplicating nested objects. - For sitelinks search box / Action markup, wrap or cast with
WithActionConstraintssoquery-input(and other*-input/*-output) type-check. - When injecting into HTML, escape
<,>,&,'in the JSON string (or usereact-schemaorg'sJsonLd). - Prefer absolute HTTPS URLs for
url,image,logo,sameAs, and@idvalues that crawlers resolve.
Verification
Prefer the repo's existing checks. For meaningful schema-dts work, include the relevant subset:
- Typecheck the JSON-LD builders and any framework wrappers.
- Confirm root objects use
WithContext/Graphand nested nodes omit@context. - Smoke-render the page and inspect the
application/ld+jsonscript(s) in the DOM / view-source. - Optionally paste output into Google Rich Results Test or Schema Markup Validator when SEO eligibility matters.
- After upgrading to v2, re-check Role-shaped properties,
Quantityassignments, multi-type nodes, and any customschema-dts-genoutput (now importsschema-dts-lib).