fix(ivy): allow abstract directives to have an invalid constructor (#32987)
For abstract directives, i.e. directives without a selector, it may happen that their constructor is called explicitly from a subclass, hence its parameters are not required to be valid for Angular's DI purposes. Prior to this commit however, having an abstract directive with a constructor that has parameters that are not eligible for Angular's DI would produce a compilation error. A similar scenario may occur for `@Injectable`s, where an explicit `use*` definition allows for the constructor to be irrelevant. For example, the situation where `useFactory` is specified allows for the constructor to be called explicitly with any value, so its constructor parameters are not required to be valid. For `@Injectable`s this is handled by generating a DI factory function that throws. This commit implements the same solution for abstract directives, such that a compilation error is avoided while still producing an error at runtime if the type is instantiated implicitly by Angular's DI mechanism. Fixes #32981 PR Close #32987
This commit is contained in:
@ -66,8 +66,7 @@ export interface CompilerOptions extends ts.CompilerOptions {
|
||||
// be determined. When this value option is not provided or is `false`, constructor
|
||||
// parameters of classes marked with `@Injectable` whose type cannot be resolved will
|
||||
// produce a warning. With this option `true`, they produce an error. When this option is
|
||||
// not provided is treated as if it were `false`. In Angular 6.0, if this option is not
|
||||
// provided, it will be treated as `true`.
|
||||
// not provided is treated as if it were `false`.
|
||||
strictInjectionParameters?: boolean;
|
||||
|
||||
// Whether to generate a flat module index of the given name and the corresponding
|
||||
|
Reference in New Issue
Block a user