Build · language boundary
TypeScript and JSX
Presolve 0.2 beta targets the TypeScript 7.0 compatibility train. TypeScript proves language types; the Presolve compiler separately proves component identity, ownership, dependencies, DOM operations, serialization, and capability behavior.
Generated project defaults
{"compilerOptions": {"target": "ES2022","moduleResolution": "NodeNext","strict": true,"noEmit": true,"jsx": "preserve"}}TSX in render
Use intrinsic HTML elements, static attributes, admitted dynamic bindings, and compiler-resolved component classes. Use className and htmlFor for their HTML counterparts.
<label htmlFor="name">Name</label><input id="name" className="field" value={this.name} />Events
Pass an action directly when possible. Use a closure only for an admitted exact capture, such as a primitive item identity.
<button onClick={this.save}>Save</button><button onClick={() => this.remove(todo.id)}>Remove</button>Type-valid is not automatically lowerable
TypeScript accepting a program does not prove that Presolve can publish its meaning. Arbitrary control flow, JSX transforms, constructors, DOM mutation, async actions, capabilities, and package internals remain subject to compiler contracts.
If the compiler cannot establish the required semantics, pnpm check emits a stable diagnostic. It does not silently run the source through a generic renderer or reactive fallback.
Version policy
Use the TypeScript version installed by the scaffold and keep @presolve/typescript-authority, the CLI, and framework on the same Presolve release. TypeScript 7.1 is not the supported baseline until its compatibility matrix is proven.