Schema.org TypeScript Type Definitions

2.0.0 · active · verified Sun Apr 19

schema-dts provides comprehensive TypeScript definitions for the Schema.org vocabulary, specifically designed for use with JSON-LD structured data. It aims to simplify the creation and validation of Schema.org markup by offering complete sets of discriminated type unions, enabling robust type-checking and IDE auto-completion. The package is currently at version 2.0.0 and frequently updates its typings to align with the latest Schema.org releases, such as v30, v28, v15, ensuring developers always have access to current definitions. A key differentiator is its strict type validation, which helps prevent common errors in JSON-LD implementation. Although hosted under the Google GitHub organization, the README clarifies it is not an officially supported Google product, but it is actively maintained.

Common errors

Warnings

Install

Imports

Quickstart

Demonstrates defining Schema.org types like `Person` and `Organization` using `WithContext<T>` and then serializing them into a JSON-LD script tag for web embedding.

import type { Person, Organization, Thing, WithContext } from 'schema-dts';

/**
 * Helper function to generate a JSON-LD script tag.
 * In a real-world app, you might use a templating engine or a UI framework component.
 */
export function generateJsonLdScript<T extends Thing>(json: WithContext<T>): string {
  return `<script type="application/ld+json">\n${JSON.stringify(json, null, 2)}\n</script>`;
}

// Define a person's structured data
const inventor: Person = {
  '@type': 'Person',
  name: 'Grace Hopper',
  disambiguatingDescription: 'American computer scientist',
  birthDate: '1906-12-09',
  deathDate: '1992-01-01',
  awards: [
    'Presidential Medal of Freedom',
    'National Medal of Technology and Innovation',
    'IEEE Emanuel R. Piore Award'
  ]
};

// Define an organization's structured data with context
const myOrganizationLd = generateJsonLdScript<Organization>({
  '@context': 'https://schema.org',
  '@type': 'Corporation',
  name: 'Example Corp LLC',
  url: 'https://www.example.com',
  logo: 'https://www.example.com/logo.png'
});

console.log(myOrganizationLd);
/* Expected output (prettified JSON):
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "Corporation",
  "name": "Example Corp LLC",
  "url": "https://www.example.com",
  "logo": "https://www.example.com/logo.png"
}
</script>
*/

view raw JSON →