Skip to content

JobPosting builder

Creates a JobPosting following Google for Jobs conventions. The JobPosting builder injects @type, validates synchronously, and rejects unknown properties.

// Astro — shown first when Astro is selected
import { JobPosting } from '@unschema-graph/astro';
// Svelte 5
import { JobPosting } from '@unschema-graph/svelte';
// Core / Node.js
import { JobPosting } from '@unschema-graph/core';
import { JobPostingSchema } from '@unschema-graph/core';

The JobPostingSchema Zod schema is also exported for composition and advanced validation.

import {
JobPostingSchema,
type SchemaInput,
type SchemaOutput,
} from '@unschema-graph/core';
type JobPostingInput = SchemaInput<typeof JobPostingSchema>;
type JobPostingOutput = SchemaOutput<typeof JobPostingSchema, 'JobPosting'>;
Property Input type Required Default / constraints
@id string No non-empty
title string Yes non-empty
description string Yes non-empty
datePosted string | number | Date Yes non-empty
hiringOrganization string | Organization | EntityReference Yes non-empty
jobLocation Place | PostalAddress | EntityReference | string No —
validThrough string | number | Date No non-empty
employmentType string | Array No —
jobLocationType string No —
applicantLocationRequirements string | object No —
baseSalary object No —

The aliases above remain the exact authority for nested object types. The builder also accepts a validation configuration as its second argument and always returns @type: 'JobPosting'.

import { JobPosting } from '@unschema-graph/core';
const entity = JobPosting({
"title": "Astro developer",
"description": "Build accessible content sites.",
"datePosted": "2026-09-29",
"hiringOrganization": "Acme"
});
{
"@type": "JobPosting",
"title": "Astro developer",
"description": "Build accessible content sites.",
"datePosted": "2026-09-29",
"hiringOrganization": {
"@type": "Organization",
"name": "Acme"
}
}
  • Passing an unknown property to the strict builder.
  • Using source data that is missing a required property.
  • Assuming valid Schema.org guarantees a search appearance.

Use JobPosting.safeParse(input) for external data. If Schema.org supports a property that is not modeled yet, validate the entity first and then use withAdditionalProperties(). Never pass invented properties to the strict builder.