-
Notifications
You must be signed in to change notification settings - Fork 27.1k
Angular Language Service keeps crashing when using host and generic with host type-checking #63052
Copy link
Copy link
Closed
Description
Which @angular/* package(s) are the source of the bug?
language-service
Is this a regression?
Yes
Description
When using typeCheckHostBindings in Angular compiler options, the Angular Language Service will crash when it encounters a Component/Directive that has a host property as well as a generic. Disabling typeCheckHostBindings is an easy way to work around the issue, but that's not ideal.
Generics without host, or host without generics both seem to work. It just seems to be unusable when they are both used at the same component.
Reproduction
-
Create a fresh Angular project
$ npx @angular/cli@latest new --ssr=false --style=css --zoneless=false ng-20.1
-
Update the
Appcomponent so that it has ahostproperty and a generic (App<T>)Show full
app.tsimport { Component, input, signal } from '@angular/core'; import { RouterOutlet } from '@angular/router'; @Component({ selector: 'app-root', imports: [RouterOutlet], templateUrl: './app.html', styleUrl: './app.css', host: { '[class.show]': 'show()' } }) export class App<T> { protected readonly title = signal('ng-20.1'); readonly show = input<T>(); }
-
Do any editor action (find all references)
-
Check "Output > Angular Language Service" for the error
Please provide a link to a minimal reproduction of the bug
No response
Please provide the exception or error you saw
c:\Users\<user>\.vscode\extensions\angular.ng-template-20.2.0\node_modules\@angular\language-service\bundles\language-service.js:55841
throw new Error(`Assertion Error: expected ${dirRef.debugName} not to be generic.`);
^
Error: Assertion Error: expected App not to be generic.
at TcbNonGenericDirectiveTypeOp.execute (c:\Users\<user>\.vscode\extensions\angular.ng-template-20.2.0\node_modules\@angular\language-service\bundles\language-service.js:55841:23)
at Scope.executeOp (c:\Users\<user>\.vscode\extensions\angular.ng-template-20.2.0\node_modules\@angular\language-service\bundles\language-service.js:57347:28)
at Scope.render (c:\Users\<user>\.vscode\extensions\angular.ng-template-20.2.0\node_modules\@angular\language-service\bundles\language-service.js:57233:22)
at renderBlockStatements (c:\Users\<user>\.vscode\extensions\angular.ng-template-20.2.0\node_modules\@angular\language-service\bundles\language-service.js:55445:39)
at generateTypeCheckBlock (c:\Users\<user>\.vscode\extensions\angular.ng-template-20.2.0\node_modules\@angular\language-service\bundles\language-service.js:55430:29)
at TypeCheckFile.addTypeCheckBlock (c:\Users\<user>\.vscode\extensions\angular.ng-template-20.2.0\node_modules\@angular\language-service\bundles\language-service.js:58267:24)
at TypeCheckContextImpl.addDirective (c:\Users\<user>\.vscode\extensions\angular.ng-template-20.2.0\node_modules\@angular\language-service\bundles\language-service.js:58480:31)
at ComponentDecoratorHandler.typeCheck (c:\Users\<user>\.vscode\extensions\angular.ng-template-20.2.0\node_modules\@angular\language-service\bundles\language-service.js:63994:17)
at TraitCompiler.typeCheck (c:\Users\<user>\.vscode\extensions\angular.ng-template-20.2.0\node_modules\@angular\language-service\bundles\language-service.js:43913:39)
at c:\Users\<user>\.vscode\extensions\angular.ng-template-20.2.0\node_modules\@angular\language-service\bundles\language-service.js:60055:39
Reproduction link
https://stackblitz.com/edit/siflugxu?file=src%2Fmain.ts
Please provide the environment you discovered this bug in (run ng version)
Angular CLI: 20.1.5
Node: 24.4.1
Package Manager: npm 11.4.2
OS: win32 x64
Angular: 20.1.6
... common, compiler, compiler-cli, core, forms
... platform-browser, router
Package Version
------------------------------------------------------
@angular-devkit/architect 0.2001.5
@angular-devkit/core 20.1.5
@angular-devkit/schematics 20.1.5
@angular/build 20.1.5
@angular/cli 20.1.5
@schematics/angular 20.1.5
rxjs 7.8.2
typescript 5.8.3
zone.js 0.15.1
Anything else?
No response
Reactions are currently unavailable