Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Yes: the approach described for @relax.js/core adds a separate TypeScript-powered check for supported templates without changing runtime rendering or requiring a build step. It can resolve expressions in literal templates against TypeScript types, but it does not cover every template shape—and its skipped-template report matters as much as its diagnostics.
What the checker does
In an October 6, 2026 DEV Community article, Jonas Gauffin describes a @relax.js/core check command that reads a project’s tsconfig.json, finds literal compileTemplate calls and html tagged template literals, then uses the TypeScript compiler API to check expressions. The checker is a separate validation step; it does not add type checking to runtime rendering.
As an Amazon Associate I earn from qualifying purchases.
For compileTemplate, type parameters describe the view model passed to rendering and the functions context. For an html template, the checker can infer a context type from a bind call in the same file. It emits tsc-like diagnostics with locations at the relevant expressions. The article’s examples include a misspelled property, an unsupported event attribute, and a dotted path where the html tag expects a flat property name.
Which template expressions are checked
Paths and conditions
Interpolation paths, if and unless expressions, and handler arguments are resolved segment by segment against the applicable type. The described checker traverses through nullable values because the runtime renders null and undefined as empty. An array access such as [0] resolves to the element type, while encountering any ends the type walk.
#1 Best Overall
Loops
A declaration such as loop="row in rows" requires rows to be an array. Within the loop, the alias row is checked as the array’s element type.
Function calls and event handlers
Function calls in interpolations and click handlers are checked against the call signature and argument types in the functions context. The handler’s event value is typed as Event. For an r-<event> attribute, the checker looks for the matching on<event> member on that element’s DOM type, using the same event test as the runtime.
Rank #2
Pipes and interpolation syntax
Pipes must be built in unless a registry is passed to the call. The checker also reports an interpolation opened with {{ if it does not close on the same line.
What is skipped or only partly checked
The checker needs literal template text at the call site to resolve expressions. Gauffin says it skips templates stored in variables, assembled with ${} substitutions, or loaded from files. It reports skipped cases and their reasons, so a clean diagnostic list alone does not mean every template was checked.
- No type arguments: A
compileTemplatecall without type arguments still gets syntax, event, and pipe checks, but not path resolution. - Context outside the file: An
htmlbind function returned or called in another file may not have an inferable context type. - Dynamic templates: Variable-based, substituted, or file-loaded templates are not covered as literal call-site text.
These limits make the skipped count a coverage signal. If a project expects every template to be statically checkable, treat any skipped templates as a failed check rather than assuming the run is fully green.
Why well-formed HTML still matters
The runtime and checker share expression grammar and event-checking logic, but they do not parse HTML the same way. The runtime uses DOMParser; the checker uses a small scanner that runs under Node without a DOM. The scanner does not apply browser content-model rules. As a result, malformed structures—such as a paragraph implicitly closed by a block element or a table row outside a table—can make loop-alias scope differ from what the rendered DOM would imply. The article’s practical advice is to keep templates well formed.
Rank #4
How to make checking part of routine validation
Gauffin recommends calling checkProject(tsconfig) in the test suite and asserting that both the formatted diagnostics and skipped-template list are empty. The no-skips assertion is the stricter part: omit it only when dynamic templates are an intentional part of the project.
Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallCrashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteIn the implementation described in the article, TypeScript is an optional peer dependency and is loaded for the check command rather than for runtime use. This describes the article’s implementation, not an independently verified statement about the package’s current release.
Best Value
How this differs from integrated framework checking
The article contrasts this separate command with Angular’s integrated compiler checks and editor integration. The described Relax.js checker runs as a command and does not provide editor squiggles; it checks supported, typed literal templates rather than templates loaded from files. That makes it useful as a test or validation step, but not a substitute for editor feedback or comprehensive checking of dynamic template sources.
When this approach fits
- Your templates are mostly literal strings at
compileTemplateorhtmlcall sites. - You can provide the view-model and functions-context types the checker needs.
- You want pre-render diagnostics for property paths, handlers, events, and pipes without adding a build step.
- Your test suite can enforce both zero diagnostics and, where appropriate, zero skipped templates.
If templates are commonly assembled dynamically or loaded from files, the checker can still catch supported syntax and event issues in applicable calls, but its report cannot establish that those other templates are type-safe.
Conclusion
A template embedded as a string can hide mistakes from ordinary TypeScript checking. The checker Gauffin describes brings useful type-aware diagnostics to supported literal templates without changing runtime behavior. Its value depends on treating coverage honestly: review skipped templates, use explicit types, and keep markup well formed.
Free tools Windows power users keep installed
One-click scans. No signup required.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




