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

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.)

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