JSON IO
| JSON.parse typed | |
| Pretty print | |
| Config file pattern | |
| Validate shape simply |
JSON.parse typed
Parse returns an unknown value, so assert the expected shape right away. The assertion documents intent and unlocks typed access below.
const raw: string = "{"port":3000}";
const config = JSON.parse(raw) as { port: number };
console.log(config.port);
The cast does not check the data, it only labels it. The next section adds a light check before trusting the label.
Pretty print
Two extra arguments turn dense JSON into readable text. Human-friendly output matters for files that users may open and edit.
const config = { port: 3000, mode: "dev" };
const text: string = JSON.stringify(config, null, 2);
console.log(text);
pretty JSON with two space indent
Config file pattern
Config flow has three steps: read text, parse it, and label the shape. One helper keeps that flow in a single reviewed place.
import { readFileSync } from "node:fs";
function loadPort(path: string): number {
const text: string = readFileSync(path, "utf8");
const data = JSON.parse(text) as { port: number };
return data.port;
}
Validate shape simply
Disks hold surprises, from hand edits to half-written saves. Check the one field the program needs before using it.
function isPortConfig(value: unknown): boolean {
if (typeof value !== "object" || value === null) {
return false;
}
const port = (value as { port: unknown }).port;
return typeof port === "number";
}
Return false for null, for non-objects, and for wrong field types. Callers then fall back to defaults instead of crashing later.
Next: Dates
Article author: Arthur Isaev