refactor(core): make generic mandatory for ModuleWithProviders (#36892)

In v9, we deprecated the use of ModuleWithProviders
without a generic. In v10, we will be requiring the
generic when using ModuleWithProviders. You can read
more about the reasoning behind this change in the
migration guide:
http://v9.angular.io/guide/migration-module-with-providers

PR Close #36892
This commit is contained in:
Kara Erickson 2020-05-01 16:39:22 -07:00 committed by Alex Rickabaugh
parent 420b9be1c1
commit 20cc3ab37e
6 changed files with 13 additions and 9 deletions

View File

@ -23,7 +23,7 @@ export class GreetingModule {
// #enddocregion ctor // #enddocregion ctor
// #docregion for-root // #docregion for-root
static forRoot(config: UserServiceConfig): ModuleWithProviders { static forRoot(config: UserServiceConfig): ModuleWithProviders<GreetingModule> {
return { return {
ngModule: GreetingModule, ngModule: GreetingModule,
providers: [ providers: [

View File

@ -2,7 +2,9 @@
"extends": "./tsconfig.json", "extends": "./tsconfig.json",
"compilerOptions": { "compilerOptions": {
"outDir": "../out-tsc/app", "outDir": "../out-tsc/app",
"types": [] "types": [],
// TODO(FW-2145): turn lib checks back on after fixing in-memory-api and investigating impact of ModuleWithProviders
"skipLibCheck": true
}, },
"files": [ "files": [
"src/main.ts", "src/main.ts",

View File

@ -17,7 +17,9 @@
"lib": [ "lib": [
"es2018", "es2018",
"dom" "dom"
] ],
// TODO(FW-2145): turn lib checks back on after fixing in-memory-api and investigating impact of ModuleWithProviders
"skipLibCheck": true
}, },
"angularCompilerOptions": { "angularCompilerOptions": {
"enableIvy": false, "enableIvy": false,

View File

@ -13,7 +13,9 @@
"suppressImplicitAnyIndexErrors": true, "suppressImplicitAnyIndexErrors": true,
"typeRoots": [ "typeRoots": [
"node_modules/@types" "node_modules/@types"
] ],
// TODO(FW-2145): turn lib checks back on after fixing in-memory-api and investigating impact of ModuleWithProviders
"skipLibCheck": true
}, },
"include": [ "include": [
"../../../content/examples/*/e2e-spec.ts" "../../../content/examples/*/e2e-spec.ts"

View File

@ -559,7 +559,7 @@ export declare class ModuleWithComponentFactories<T> {
constructor(ngModuleFactory: NgModuleFactory<T>, componentFactories: ComponentFactory<any>[]); constructor(ngModuleFactory: NgModuleFactory<T>, componentFactories: ComponentFactory<any>[]);
} }
export declare interface ModuleWithProviders<T = any /** TODO(alxhub): remove default when callers pass explicit type param */> { export declare interface ModuleWithProviders<T> {
ngModule: Type<T>; ngModule: Type<T>;
providers?: Provider[]; providers?: Provider[];
} }

View File

@ -82,16 +82,14 @@ export interface NgModuleDef<T> {
/** /**
* A wrapper around an NgModule that associates it with the providers. * A wrapper around an NgModule that associates it with the providers.
* *
* @param T the module type. In Ivy applications, this must be explicitly * @param T the module type.
* provided.
* *
* Note that using ModuleWithProviders without a generic type is deprecated. * Note that using ModuleWithProviders without a generic type is deprecated.
* The generic will become required in a future version of Angular. * The generic will become required in a future version of Angular.
* *
* @publicApi * @publicApi
*/ */
export interface ModuleWithProviders< export interface ModuleWithProviders<T> {
T = any /** TODO(alxhub): remove default when callers pass explicit type param */> {
ngModule: Type<T>; ngModule: Type<T>;
providers?: Provider[]; providers?: Provider[];
} }