liveBook · Manning

Type safety

Type safety is the property that program operations respect type constraints, preventing or detecting invalid uses of values.

How 8 Manning books explain it

Rust Servers, Services, and Apps

Type safety is the property that program operations respect the constraints of their declared or inferred types.

How it is used
Supports safer backend refactoring as APIs and data models change.
How deep it goes
Defines Rust’s compile-time type checking and inference, then applies compile-time checking to SQL queries without detailing compiler internals.
Examples
Uses tutor API changes and a PostgreSQL script defining tutor and course tables.
What you can do after
Diagnose/debug with it by resolving compiler-reported type conflicts and SQLx-reported schema mismatches before running the service.

Read how Rust Servers, Services, and Apps explains type safety →

Rust in Action: Systems programming concepts and techniques

Type safety is the enforcement of rules that prevent values of incompatible types from being used together in invalid operations.

How it is used
Uses type safety to explain rejected mixed-type comparisons and the consequences of replacing integer IDs with a dedicated struct.
How deep it goes
Works through casts, fallible conversion, and an ownership error while introducing traits and Result only briefly.
Examples
Uses i32–u16 comparisons, a CubeSat struct, and signed-versus-unsigned readings of one bit pattern.
What you can do after
Diagnose/debug with compiler errors by identifying mismatched comparison types, choosing explicit conversions, and recognizing use-after-move errors.

Read how Rust in Action: Systems programming concepts and techniques explains type safety →

Go in Action, Second Edition

Type safety is the property that prevents operations from applying values in ways inconsistent with their types.

How it is used
Positions compiler-enforced assignments as a way to catch mismatches early and build safer Go domain models.
How deep it goes
Explains assignment rejection and applies type checking to composed domain types and generics without claiming to prevent every runtime error.
Examples
Uses a rejected string-to-int assignment and a recipe model with measurements, ingredients, scaling, and conversion.
What you can do after
Diagnose/debug with it by using Go compiler errors to catch incompatible assignments before running or deploying code.

Read how Go in Action, Second Edition explains type safety →

Julia as a Second Language

Type safety is the property that a programming language prevents operations from being applied to values in incompatible ways.

How it is used
Uses value and type restrictions to catch invalid categories, mismatched vector coordinates, and nonnumeric coordinates.
How deep it goes
Demonstrates runtime errors, shared field types, explicit conversion, numeric bounds, and method signatures through Julia examples.
Examples
Contrasts valid and invalid drive styles, mixed-type vector coordinates, and points and vectors constrained to numeric coordinates.
What you can do after
Build it from scratch with enumerations and constrained parametric types to catch unsuitable values at runtime.

Read how Julia as a Second Language explains type safety →

React in Depth

Strong typing is a type-system property in which operations enforce compatibility between values and their types rather than freely coercing incompatible values.

How it is used
Uses TypeScript to catch incompatible values and API usage before React application code runs.
How deep it goes
Descends from static checks into React hook and generic-component typing, while stopping short of a complete TypeScript treatment.
Examples
Uses typed useState, useRef, contexts, effects, useReducer, callbacks, deferred values, and generic React components.
What you can do after
Apply it via TypeScript to build more reliable React code and detect many type errors before runtime.

Read how React in Depth explains type safety →

Fabulous Adventures in Data Structures and Algorithms

Type safety is the property that a program's operations respect the constraints imposed by its types.

How it is used
Uses type safety to guide generic data-structure design and expose unsafe variance choices.
How deep it goes
Demonstrates unsafe and safe covariance with C# interfaces, mutation, output positions, immutability, and extension methods.
Examples
Uses an IList<Tiger> covariance counterexample and a covariant immutable stack accepting Tigers and Giraffes.
What you can do after
Apply via C# generic interfaces and extension methods that preserve safe assignments across immutable data structures.

Read how Fabulous Adventures in Data Structures and Algorithms explains type safety →

Authorization in Action

Strong typing is a language property in which values and operations obey enforced type rules that prevent invalid combinations.

How it is used
Protects fine-grained authorization policies from invalid values, attributes, relationships, and entity combinations before evaluation.
How deep it goes
Descends from typed primitives through schema-checked attributes, namespaces, and entity references, stopping at policy validation rather than runtime behavior.
Examples
Uses IP checks, ownership expressions, namespace-qualified entities, and invalid Employee, Document, timestamp, and attribute references.
What you can do after
Diagnose policy mistakes before deployment and maintain authorization rules with schema validation and analysis tooling.

Read how Authorization in Action explains type safety →

Refactoring to Rust

A strong static type system enforces compile-time type constraints and does not generally permit incompatible values to be used interchangeably.

How it is used
Uses compile-time type constraints to make large codebases easier to understand and prevent incompatible values from reaching functions.
How deep it goes
Defines static checking and inference with map and function examples, while deferring some annotation cases to later treatment.
Examples
Contrasts Java map declarations with inferred and explicitly typed Rust map initialization.
What you can do after
Evaluate/understand how Rust rejects incompatible arguments while inferring most local types.

Read how Refactoring to Rust explains type safety →

Related concepts

These guides are generated from the text of Manning books by Manning's knowledge graph and link to the sections they draw on. The full books are available on liveBook and at manning.com.