Skip to content
Novus Examples
mts1.1 KB

TypeScript — Shapes (union, generics, enum)

A realistic TypeScript snippet with an enum, a discriminated union, generics, exhaustive switch handling, and a typed reduce — for testing the type checker, highlighters, and the TS ESLint parser.

Preview — first 50 linesmts
// Geometry in TypeScript: an enum, a discriminated union, generics,
// exhaustive switch handling, and a typed reduce.

export enum Unit {
  Metric = "metric",
  Imperial = "imperial",
}

export interface Circle {
  kind: "circle";
  radius: number;
}

export interface Rectangle {
  kind: "rectangle";
  width: number;
  height: number;
}

export type Shape = Circle | Rectangle;

export function area(shape: Shape): number {
  switch (shape.kind) {
    case "circle":
      return Math.PI * shape.radius ** 2;
    case "rectangle":
      return shape.width * shape.height;
    default: {
      const _exhaustive: never = shape;
      return _exhaustive;
    }
  }
}

export function largest<T extends Shape>(shapes: readonly T[]): T | undefined {
  return shapes.reduce<T | undefined>(
    (best, s) => (best === undefined || area(s) > area(best) ? s : best),
    undefined,
  );
}

const shapes: Shape[] = [
  { kind: "circle", radius: 2 },
  { kind: "rectangle", width: 3, height: 4 },
];

console.log(`unit: ${Unit.Metric}`);
for (const s of shapes) {
  console.log(`${s.kind}: area = ${area(s).toFixed(2)}`);
}
51 lines total — download for the full file.

Specifications

Language
TypeScript
Kind
realistic snippet
Lines
50
Encoding
UTF-8
Line Endings
LF

Testing contract

Expected to pass
Scenario
Type-check the file with `strict: true`, then delete one arm of the switch in `area()` and type-check again.
Expected result
The unmodified file compiles with no diagnostics and prints `unit: metric`, `circle: area = 12.57`, `rectangle: area = 12.00`. Removing an arm makes the `const _exhaustive: never = shape` assignment fail to compile - that line is the exhaustiveness check, and a checker that stays silent has not narrowed the discriminated union.

What is a .mts file?

TypeScript (.mts) is a plain-text source file for TypeScript — a statically typed superset of JavaScript that compiles to plain JS. The .mts extension specifically marks an ES-module TypeScript file. It adds interfaces, generics, enums, and type annotations on top of JavaScript syntax.

How to use this file

Use an example .mts file to test TypeScript-aware highlighters, the tsc compiler and type checker, ESLint with the TS parser, and editor tooling. (We ship TypeScript as .mts to avoid the MPEG-TS .ts extension collision.)

How to use this file for testing

“TypeScript — Shapes (union, generics, enum)” is a deterministic Novus Examples fixture for Syntax highlighting, Code parsing, Editor testing. Idiomatic hello-world programs and realistic snippets across sixteen languages, exercising comments, string escapes, interpolation, numeric literals, and language keywords — for testing syntax highlighters, editor themes, and tree-sitter grammars.

Documented properties for this file: TypeScript · UTF-8 · LF. Compare results against paired or grouped companions on this page when present (clean↔damaged, searchable↔scanned, or format twins) so scores stay reproducible across runs.

Download the file once, keep the path stable in CI or local scripts, and treat the spec table as the contract: dimensions, seeds, field lists, and roles are intentional. Corrupt or invalid samples are labelled as such — expect parsers to fail loudly rather than silently accept them.

This is a short, known-correct source file. Run it through your syntax highlighter, linter, formatter, tree-sitter grammar, or parser, and open it in the in-browser editor to tweak and re-download. Each snippet exercises comments, string escapes, literals, and language keywords.

Code examples

npx tsx shapes.mts          # or: deno run shapes.mts

Generated by generation/code_samples.py. Free for any use, no attribution required — license.