diff --git a/packages/compiler-cli/src/ngtsc/typecheck/src/checker.ts b/packages/compiler-cli/src/ngtsc/typecheck/src/checker.ts
index 7b28868cb6a3..c61bda38d4bd 100644
--- a/packages/compiler-cli/src/ngtsc/typecheck/src/checker.ts
+++ b/packages/compiler-cli/src/ngtsc/typecheck/src/checker.ts
@@ -719,6 +719,11 @@ export class TemplateTypeCheckerImpl implements TemplateTypeChecker {
}
const emitted = emittedRef.expression;
if (emitted instanceof WrappedNodeExpr) {
+ if (refTo.node === inContext) {
+ // Suppress self-imports since components do not have to import themselves.
+ return null;
+ }
+
let isForwardReference = false;
if (emitted.node.getStart() > inContext.getStart()) {
const declaration = this.programDriver.getProgram()
diff --git a/packages/core/schematics/test/standalone_migration_spec.ts b/packages/core/schematics/test/standalone_migration_spec.ts
index 5f496b23bfd4..78fcd1e868a8 100644
--- a/packages/core/schematics/test/standalone_migration_spec.ts
+++ b/packages/core/schematics/test/standalone_migration_spec.ts
@@ -1550,6 +1550,39 @@ describe('standalone migration', () => {
`));
});
+ it('should not generate a forwardRef for a self import', async () => {
+ writeFile('decls.ts', `
+ import {Component} from '@angular/core';
+
+ @Component({
+ selector: 'comp',
+ template: ''
+ })
+ export class MyComp {}
+ `);
+
+ writeFile('module.ts', `
+ import {NgModule} from '@angular/core';
+ import {MyComp} from './decls';
+
+ @NgModule({declarations: [MyComp]})
+ export class Mod {}
+ `);
+
+ await runMigration('convert-to-standalone');
+
+ expect(stripWhitespace(tree.readContent('decls.ts'))).toEqual(stripWhitespace(`
+ import {Component} from '@angular/core';
+
+ @Component({
+ selector: 'comp',
+ template: '',
+ standalone: true
+ })
+ export class MyComp {}
+ `));
+ });
+
it('should not generate a forwardRef when adding an imported module dependency', async () => {
writeFile('./comp.ts', `
import {Component, NgModule} from '@angular/core';