Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

`ng generate component/directive --module` declares a class that doesn't exist when `addTypeToClassName` is `false`

Aperta
#34,447 0 commenti 0 reazioni 0 assegnatari Vedi su GitHub

I maintainer di solito rispondono entro 1 giorno

@MeAkib ci sta già lavorando.

Dal 20/10/2026.

  • #34448 di @MeAkib — aperta

Valutazione

Difficoltà
3/5
Tempo stimato
1-2 giorni
Idoneità per principianti
25/100
Tipo di issue
Bug
Chiarezza
Specificata chiaramente
Stato di attività
Ferma
Stack tecnologico
angular, typescript
Ambito
backend, cli

Direzione di ricerca

Start with packages/schematics/angular/utility/add-declaration-to-ng-module.ts and compare how the component and directive schematics compute class names in their index.ts files. Reproduce with the ng generate component widget --module app command and ng build; done means the NgModule declaration and export names match the generated class when addTypeToClassName is false. A linked pull request is already open.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

area: @schematics/angular
Command

generate

Is this a regression?
  • Yes, this behavior used to work in the previous version
The previous version in which this bug was not present was

The addTypeToClassName option was added in 21.0.0, and the declaration code was not updated, so it never worked.

Description

When a component or directive is generated into an NgModule with addTypeToClassName: false and a type set, the
generated class and the symbol added to the NgModule don't match:

  • The component/directive class is named without the type (e.g. Widget), as configured.
  • The NgModule declarations (and exports with --export) import the name with the type
    (e.g. WidgetComponent), so the build fails.

This is the configuration that ng new --no-standalone --file-name-style-guide=2016 writes to angular.json:

"@schematics/angular:component": { "type": "component", "addTypeToClassName": false },
"@schematics/angular:directive": { "type": "directive", "addTypeToClassName": false }

The component and directive schematics compute the class name with addTypeToClassName
(packages/schematics/angular/component/index.ts, packages/schematics/angular/directive/index.ts), but the shared
addDeclarationToNgModule helper always appends the type:

// packages/schematics/angular/utility/add-declaration-to-ng-module.ts
const classifiedName =
  strings.classify(options.name) + (options.type ? strings.classify(options.type) : '');
Minimal Reproduction
ng new ws --no-standalone --file-name-style-guide=2016 --defaults
cd ws
ng generate component widget --module app
ng build

Generated src/app/widget/widget.component.ts:

export class Widget {}

Updated src/app/app.module.ts:

import { WidgetComponent } from './widget/widget.component';

@NgModule({
  declarations: [App, WidgetComponent],

The same happens for ng generate directive ... --module.

Exception or Error
✘ [ERROR] TS2305: Module '"./widget/widget.component"' has no exported member 'WidgetComponent'. [plugin angular-compiler]
✘ [ERROR] NG1010: Value at position 1 in the NgModule.declarations of AppModule is not a reference
Your Environment
Angular CLI       : 22.2.3
Node.js           : 24.15.0
Package Manager   : npm 11.12.1
Operating System  : darwin arm64
@schematics/angular : 22.2.3
Anything else relevant?
  • Introduced together with addTypeToClassName in e417c89f9e (#31053, v21.0.0). The same code is on 21.2.x and 22.2.x.
  • Suggested fix: let addDeclarationToNgModule use the class name computed by the calling schematic (or honour
    addTypeToClassName), so the declaration matches the generated class. Happy to send a PR with specs for the
    component and directive schematics.
Lingua principale
TypeScript
Stelle
27k
Fork
11.8k
Merge medio
1g 6h
PR unite (30g)
216

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di angular/angular-cli

Tutte le issue di angular/angular-cli

Issue simili

Altre issue su TypeScript

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.