angular/angular · error · Error
The `TemplateTypeChecker` does not work without `enableTempl
Error message
The `TemplateTypeChecker` does not work without `enableTemplateTypeChecker`.
What it means
NgtscProgram.getTemplateTypeChecker() exposes the TemplateTypeChecker that powers template type-checking and tooling such as the Angular language service. The program must have been created with the enableTemplateTypeChecker option; otherwise the accessor throws a plain Error. The flag enables the analysis passes the template checker depends on, so there is no way to obtain it from a program built without that setting.
Source
Thrown at packages/compiler-cli/src/ngtsc/core/src/compiler.ts:727
* Compilation begins with an input `ts.Program`, and during template type-checking operations new
* `ts.Program`s may be produced using the `ProgramDriver`. The most recent such `ts.Program` to
* be produced is available here.
*
* This `ts.Program` serves two key purposes:
*
* * As an incremental starting point for creating the next `ts.Program` based on files that the
* user has changed (for clients using the TS compiler program APIs).
*
* * As the "before" point for an incremental compilation invocation, to determine what's changed
* between the old and new programs (for all compilations).
*/
getCurrentProgram(): ts.Program {
return this.currentProgram;
}
getTemplateTypeChecker(): TemplateTypeChecker {
if (!this.enableTemplateTypeChecker) {
throw new Error(
'The `TemplateTypeChecker` does not work without `enableTemplateTypeChecker`.',
);
}
return this.ensureAnalyzed().templateTypeChecker;
}
/**
* Retrieves the `ts.Declaration`s for any component(s) which use the given template file.
*/
getComponentsWithTemplateFile(templateFilePath: string): ReadonlySet<DeclarationNode> {
const {resourceRegistry} = this.ensureAnalyzed();
return resourceRegistry.getComponentsWithTemplate(resolve(templateFilePath));
}
/**
* Retrieves the `ts.Declaration`s for any component(s) which use the given template file.
*/
getComponentsWithStyleFile(styleFilePath: string): ReadonlySet<DeclarationNode> {View on GitHub (pinned to 51cb07e980)
Solutions
- Pass enableTemplateTypeChecker: true in the Angular compiler options when constructing the program
- For tsconfig-driven tooling, add "enableTemplateTypeChecker": true under angularCompilerOptions
- If template type info is not actually needed, use other NgtscProgram APIs (getTsProgram, getSemanticDiagnostics) that do not require the flag
Example fix
// before
const program = new NgtscProgram(rootNames, {noCheck: true}, host);
program.getTemplateTypeChecker(); // throws
// after
const program = new NgtscProgram(
rootNames,
{angularCompilerOptions: {enableTemplateTypeChecker: true}},
host,
);
program.getTemplateTypeChecker(); // ok Defensive patterns
Strategy: validation
Validate before calling
import type {NgtscProgram} from '@angular/compiler-cli';
// Check the flag before touching the accessor
function assertTemplateTypeCheckerAvailable(
program: NgtscProgram,
): asserts program is NgtscProgram {
const opts = program.getTsProgram().getCompilerOptions() as any;
if (!opts?.angularCompilerOptions?.enableTemplateTypeChecker) {
throw new Error(
'enableTemplateTypeChecker is off: pass it in Angular compiler options before calling getTemplateTypeChecker()',
);
}
} Type guard
function hasTemplateTypeCheckerEnabled(opts: {enableTemplateTypeChecker?: boolean}): boolean {
return opts.enableTemplateTypeChecker === true;
} Try / catch
try {
const ttc = program.getTemplateTypeChecker();
} catch (e) {
if (e instanceof Error && e.message.includes('enableTemplateTypeChecker')) {
// recreate the program with the option enabled, or fall back to non-template APIs
}
throw e;
} Prevention
- Centralize program creation in tooling so enableTemplateTypeChecker is always set for analysis builds
- Remember extendedTemplateTypeChecker requires the base enableTemplateTypeChecker flag
- Never assume a build-created program exposes template checking APIs
When it happens
Trigger: Calling program.getTemplateTypeChecker() on an NgtscProgram whose options lack enableTemplateTypeChecker: true — typically a custom plugin, CLI extension, or analysis tool reusing a program created by a standard ng build (which does not enable it).
Common situations: Building editor plugins or custom checks on top of @angular/compiler-cli; reusing a build program for analysis; enabling extendedTemplateTypeChecker without its required base flag enableTemplateTypeChecker.
Related errors
- Entry point "${entryPoint}" not found in program sources.
- VALUE_HAS_WRONG_TYPE
- LOCAL_COMPILATION_UNRESOLVED_CONST
- DECORATOR_COLLISION
- DECORATOR_UNEXPECTED
AI-assisted analysis of angular/angular@51cb07e980 (2026-08-22).
Data as JSON: /api/errors/5675fa0ace23fd7a.
Report an issue: GitHub.