Blog
Mert Özen's blog posts on software development, backend, frontend, and DevOps.
Narrowing in TypeScript: Shrinking Unions with Control Flow Analysis
We see how TypeScript narrows unions through control flow analysis: typeof, truthiness, equality, in and instanceof checks, discriminated unions and exhaustive checks with never.
Union and Literal Types in TypeScript: One Value, Several Possibilities
We cover 'either this or that' union types, literal types for fixed sets of values, why literals widen inside objects, a first look at as const, and why unions need narrowing.
Type Aliases and Interfaces in TypeScript: Giving Your Types a Name
We give types names with type aliases and interfaces, compare extends with intersections, look at declaration merging, and cover when to pick which one and how to name them well.
Object Types in TypeScript: Optional and readonly Properties and Index Signatures
Inline object types, optional and readonly properties, index signatures, Record, and the fresh object literal rule behind excess property checking: why TypeScript only sometimes catches extra properties.
Array and Tuple Types in TypeScript: readonly, Optional Elements and Named Tuples
string[] versus the generic Array form, readonly arrays, fixed-length tuples, optional and rest elements, named tuples, and how the noUncheckedIndexedAccess setting changes reads by index.
Basic and Special Types in TypeScript: any, unknown, never and void
Alongside string, number, boolean, bigint and symbol, we look at null and undefined in strict mode, why any is dangerous, how unknown makes it safe, and what void and never mean.
Type Inference and Annotations in TypeScript: When Do You Write the Type Yourself?
How TypeScript infers types on its own, the widening difference between let and const, why parameters get annotations, and when you should write a return type explicitly, with examples.
Setting Up TypeScript: Running Code Is Not the Same as Type-Checking It
The TypeScript Playground, installing with npm, tsc --init, npx tsc --noEmit and node file.ts on Node 26: why running code doesn't mean type-checking it, and how to read your first error message.
What Is TypeScript and Why Does It Exist? The Type Layer on Top of JavaScript
We look at the type layer TypeScript adds on top of JavaScript, the difference between compile time and runtime, what type checking catches and what changed with TypeScript 7.
JavaScript RegEx Basics: Searching and Validating Text with Regular Expressions
We use test, match, matchAll and replace with regular expressions, learn character classes, quantifiers, groups and the g, i and m flags, write email, phone and postal code checks and meet RegExp.escape.
JavaScript Date Basics: Creating, Calculating and Formatting Dates
We see that a Date is really a timestamp, then learn how to create dates, the zero-based month trap, get/set methods, the difference between two dates and formatting with toLocaleDateString and Intl.DateTimeFormat.
The JavaScript BOM: window, location, navigator and Timers
We get to know the browser objects: the global window, location for the address, navigating with history, navigator and screen info, timers with setTimeout and setInterval, and why alert, confirm and prompt are rarely used.