# Type Safety

> A mechanism that has the compiler reject operations on values of the wrong type before the code runs.

Record: `architecture:type-safety`
Kind: mechanism
Layer: [Contracts Core](https://banes-lab.com/records/layer/contracts-core.md)
Severity: mandatory
Scope: function, module, API, data
Canonical: https://banes-lab.com/ontology#architecture-type-safety

Listed in [Architecture principles](https://banes-lab.com/api/records/architecture.md), after [Schema Validation](https://banes-lab.com/records/architecture/schema-validation.md) and before [Canonical Model](https://banes-lab.com/records/architecture/canonical-model.md).

## Repair

- Refactored by: Add Types, Replace Map with DTO, Narrow Types
- Detected by: weak type usage, unsafe casts
- Violated by: any/unknown maps crossing boundaries
- Measured by: type coverage, unsafe cast count
- Enforced by: compiler flags, type checker

## Requires

- [Explicit Types](https://banes-lab.com/records/lexicon/explicit-types.md)

## Reinforces

- [Correctness](https://banes-lab.com/records/architecture/correctness.md)
- [Contracts](https://banes-lab.com/records/lexicon/contracts.md)

## Enables

- [Static Analysis](https://banes-lab.com/records/architecture/static-analysis.md)

## Conflicts with

- [Dynamic Untyped Boundaries](https://banes-lab.com/records/lexicon/dynamic-untyped-boundaries.md)
- [Stringly Typed Programming](https://banes-lab.com/records/architecture/stringly-typed-programming.md)

## In tension with

- [Rapid Scripting](https://banes-lab.com/records/lexicon/rapid-scripting.md)
- [Composite Pattern](https://banes-lab.com/records/architecture/composite-pattern.md)
- [Composite Pattern / Type Safety](https://banes-lab.com/records/tension/composite-pattern-type-safety.md)

## Tensions

- [Type Safety / Rapid Scripting](https://banes-lab.com/records/tension/rapid-scripting-type-safety.md)

## Severity

- [mandatory](https://banes-lab.com/records/vocabulary/severity-mandatory.md)

## Category

- [Schema / Canonical Data / Semantics](https://banes-lab.com/records/architecture-category/schema-canonical-data-semantics.md)

## Enforced by

- [rules/eslint/closure-discriminated-union-must-be-exhaustive.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/closure-discriminated-union-must-be-exhaustive.eslint.rule.ts.md)
- [rules/eslint/closure-no-double-cast.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/closure-no-double-cast.eslint.rule.ts.md)
- [rules/eslint/closure-no-null-managed-instance.eslint.rule.ts](https://banes-lab.com/source/governance/rules/eslint/closure-no-null-managed-instance.eslint.rule.ts.md)

## Required by

- [Explicit Contracts](https://banes-lab.com/records/architecture/explicit-contracts.md)
- [Data Contract](https://banes-lab.com/records/architecture/data-contract.md)

## Reinforced by

- [Liskov Substitution Principle](https://banes-lab.com/records/architecture/liskov-substitution.md)
- [Compile-Time Evaluation](https://banes-lab.com/records/architecture/compile-time-evaluation.md)

## Linked from

- [A check matches a shape](https://banes-lab.com/disciplined-methodology/build/a-check-matches-a-shape.md)
- [Anti-patterns](https://banes-lab.com/ontology/principles/architecture-category-anti-patterns.md)
- [Contracts / Interfaces / Compatibility](https://banes-lab.com/ontology/principles/architecture-category-contracts-interfaces-compatibility.md)
- [Correctness / Determinism / Verification](https://banes-lab.com/ontology/principles/architecture-category-correctness-determinism-verification.md)
- [SOLID / Object-Oriented Design](https://banes-lab.com/ontology/principles/architecture-category-solid-object-oriented-design.md)
- [Metaprogramming / Language-Oriented Architecture](https://banes-lab.com/ontology/principles/architecture-category-metaprogramming-language-oriented-architecture.md)
- [Structural Patterns](https://banes-lab.com/ontology/principles/architecture-category-structural-patterns.md)
- [Core Vocabulary](https://banes-lab.com/ontology/lexicon/lexicon-category-core-vocabulary.md)
- [Schema / Canonical Data / Semantics](https://banes-lab.com/ontology/lexicon/lexicon-category-schema-canonical-data-semantics.md)
- [Severity levels](https://banes-lab.com/ontology/schema/the-vocabulary-severity.md)
- [The resolutions](https://banes-lab.com/ontology/schema/the-resolutions.md)
