Compiler

Language support

The current compiler surface is broad enough for serious experimentation, but the implementation categories matter: some syntax is erased, some produces runtime transforms, some is preserved, and semantic checking is deliberately bounded.

Current external evidence:

The frozen preview wall remains 579 / 555 / 0 / 24, while the refreshed suite now measures 618 cases at 600 pass / 0 fail / 18 explicit skips. A 33-area detailed matrix records whether each capability is unsupported, parse/emit-only, partial-semantic, bounded-supported, externally covered or real-project covered.

CP22 complete: the machine-checked matrix reconciles 529 cases at 505 pass, zero fail and 24 deliberate semantic skips, including nested structural object checking.
CP38 complete: bounded index and callable object signatures share canonical structural and function types. The corpus is 569 cases at 545 pass, zero fail and 24 deliberate semantic skips.
CP42 and TCP5 complete: bounded arrays and tuples close the current Linux preview candidate at 579 cases: 555 pass, zero fail and 24 deliberate semantic skips.

Type syntax erasure

Covered areas include annotations, return types, interfaces, type aliases, unions/intersections, tuples, mapped/conditional/indexed/template-literal types, keyof/typeof/import queries, generics and defaults, assertions, satisfies, non-null assertions, type predicates, assertion signatures and type-only module forms.

Functions and classes

Typed functions/arrows/methods, overload signatures, constructors, parameter properties, accessors, optional methods, abstract, override, readonly, declare, generic methods and static blocks have regression coverage.

Runtime TypeScript transforms

Some TypeScript constructs cannot simply disappear. Enums produce runtime objects, parameter properties create assignments, namespaces produce runtime namespace objects, and CommonJS module syntax must be rewritten into executable JavaScript.

enum Mode { A, B = 3 }

class Point {
  constructor(public x: number, public y: number) {}
}

Ambient/declaration-only forms

declare, ambient interfaces/classes/functions, declare global, export as namespace, overload-only declarations and type-only imports/exports are erased without consuming following runtime statements.

Syntax rejection

The regression suite deliberately contains malformed generics, type operators, module clauses, TSX, declarations and annotations. tsc --noCheck is used as the syntax authority before a negative case is counted as a tscc bug.

The current bounded semantic surface

tscc has a separate checker pass whose first primitive slice now anchors a larger vertical contract. Explicit number, string, or boolean facts flow through literals, bound identifiers, parentheses, unary operators, additive/multiplicative expressions and direct or compound assignment. Reassigning a bound const is diagnosed.

const port: number = 8080;     // accepted
const port: number = "8080";   // diagnostic

The binder and program graph now own declarations, scopes, exports/imports and selected cross-file identities. The type model covers primitive/literal/union facts, canonical callables and objects, arrays/tuples, generics and bounded inference, ordered overloads, two-sided class types, indexed/key operators and selected mapped/conditional/template/intersection utilities. CFG-owned facts support bounded truthiness/equality/discriminant/typeof/instanceof/property-presence narrowing plus assignment and definite-assignment reasoning. Relative and bounded Node-style module/declaration paths can propagate selected types across compilation units.

This is still bounded rather than full TypeScript. Recursive/high-complexity inference, complete standard-library behavior, every class relation, cross-module runtime-TypeScript facts, project references, full JSX ecosystem typing, every package/configuration mode and the long tail of TypeScript diagnostics remain incomplete.

Practical consequence: outside the explicitly implemented semantic families, a program can emit successfully with tscc and still be rejected by full tsc. The independent suite tracks those as semantic-only skips rather than false parser failures.

Computed element access

Exact string keys and bounded dynamic string/number reads and writes are checked against structural properties and index signatures, with numeric/symbol index domains represented in the canonical type model. Complete library/container behavior remains broader than this slice.

Arrays and tuples

Arrays and tuples have canonical identities with readonly collection identity, optional/rest tuple metadata, contextual literal checking, indexed access and write rules. Full standard-library method typing and every tuple inference rule remain incomplete.