Blog
Mert Özen's blog posts on software development, backend, frontend, and DevOps.
TypeScript in the Browser: DOM Types, querySelector and Events
We look at the lib.dom types, what querySelector returns and its generic form, element types like HTMLInputElement, event types and the event.target trap, then run tsc output on a page as a module script.
tsconfig Basics: TypeScript 7 Defaults and Removed Options
We go through the strict family, target, lib, types, module, outDir and rootDir, erasableSyntaxOnly and verbatimModuleSyntax, the TypeScript 6/7 defaults and the options removed in 7.0.
Type Assertions, !, satisfies and as const in TypeScript: What to Tell the Compiler, and When
We look at what a type assertion with as does and doesn't check, the risk behind !, how satisfies from TS 4.9 checks while keeping the narrow type, and readonly literals with as const.
Intersection and Structural Typing: How TypeScript Looks at Types
We look at structural typing, where TypeScript judges types by shape rather than name, the assignability rule, how it relates to excess property checking, and intersections that combine types with &.
Typing Functions in TypeScript: Parameters, Return Types and Overloads
We cover parameter and return types, optional, default and rest parameters, function type expressions and call signatures, the subtlety of void returns, overloads and the this parameter.
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.