refactor(ivy): pre-factor: set explicit type parameters for ModuleWithProviders (#25970)

Ivy depends on having the generic type token later when reading the ModuleWithProviders from a .d.ts file.

PR Close #25970
This commit is contained in:
Alex Eagle 2018-09-14 14:55:16 -07:00 committed by Ben Lesh
parent 96ee898cee
commit cbbad1b791
9 changed files with 21 additions and 20 deletions

View File

@ -100,7 +100,7 @@ export class HttpClientXsrfModule {
/** /**
* Disable the default XSRF protection. * Disable the default XSRF protection.
*/ */
static disable(): ModuleWithProviders { static disable(): ModuleWithProviders<HttpClientXsrfModule> {
return { return {
ngModule: HttpClientXsrfModule, ngModule: HttpClientXsrfModule,
providers: [ providers: [
@ -120,7 +120,7 @@ export class HttpClientXsrfModule {
static withOptions(options: { static withOptions(options: {
cookieName?: string, cookieName?: string,
headerName?: string, headerName?: string,
} = {}): ModuleWithProviders { } = {}): ModuleWithProviders<HttpClientXsrfModule> {
return { return {
ngModule: HttpClientXsrfModule, ngModule: HttpClientXsrfModule,
providers: [ providers: [

View File

@ -75,16 +75,17 @@ export interface NgModuleDef<T, Declarations, Imports, Exports> {
* @param T the module type. In Ivy applications, this must be explicitly * @param T the module type. In Ivy applications, this must be explicitly
* provided. * provided.
*/ */
export interface ModuleWithProviders<T = any> { export interface ModuleWithProviders<
T = any /** TODO(alxhub): remove default when callers pass explicit type param */> {
ngModule: Type<T>; ngModule: Type<T>;
providers?: Provider[]; providers?: Provider[];
} }
/** /**
* A schema definition associated with an NgModule. * A schema definition associated with an NgModule.
* *
* @see `@NgModule`, `CUSTOM_ELEMENTS_SCHEMA`, `NO_ERRORS_SCHEMA` * @see `@NgModule`, `CUSTOM_ELEMENTS_SCHEMA`, `NO_ERRORS_SCHEMA`
* *
* @param name The name of a defined schema. * @param name The name of a defined schema.
* *
* @experimental * @experimental
@ -135,7 +136,7 @@ export interface NgModule {
/** /**
* The set of injectable objects that are available in the injector * The set of injectable objects that are available in the injector
* of this module. * of this module.
* *
* @see [Dependency Injection guide](guide/dependency-injection) * @see [Dependency Injection guide](guide/dependency-injection)
* @see [NgModule guide](guide/providers) * @see [NgModule guide](guide/providers)
* *
@ -145,14 +146,14 @@ export interface NgModule {
* into any component, directive, pipe or service that is a child of this injector. * into any component, directive, pipe or service that is a child of this injector.
* The NgModule used for bootstrapping uses the root injector, and can provide dependencies * The NgModule used for bootstrapping uses the root injector, and can provide dependencies
* to any part of the app. * to any part of the app.
* *
* A lazy-loaded module has its own injector, typically a child of the app root injector. * A lazy-loaded module has its own injector, typically a child of the app root injector.
* Lazy-loaded services are scoped to the lazy-loaded module's injector. * Lazy-loaded services are scoped to the lazy-loaded module's injector.
* If a lazy-loaded module also provides the `UserService`, any component created * If a lazy-loaded module also provides the `UserService`, any component created
* within that module's context (such as by router navigation) gets the local instance * within that module's context (such as by router navigation) gets the local instance
* of the service, not the instance in the root injector. * of the service, not the instance in the root injector.
* Components in external modules continue to receive the instance provided by their injectors. * Components in external modules continue to receive the instance provided by their injectors.
* *
* ### Example * ### Example
* *
* The following example defines a class that is injected in * The following example defines a class that is injected in
@ -236,7 +237,7 @@ export interface NgModule {
* ``` * ```
* *
*/ */
imports?: Array<Type<any>|ModuleWithProviders|any[]>; imports?: Array<Type<any>|ModuleWithProviders<{}>|any[]>;
/** /**
* The set of components, directives, and pipes declared in this * The set of components, directives, and pipes declared in this

View File

@ -228,7 +228,7 @@ function flatten<T>(values: any[]): T[] {
return out; return out;
} }
function expandModuleWithProviders(value: Type<any>| ModuleWithProviders): Type<any> { function expandModuleWithProviders(value: Type<any>| ModuleWithProviders<{}>): Type<any> {
if (isModuleWithProviders(value)) { if (isModuleWithProviders(value)) {
return value.ngModule; return value.ngModule;
} }
@ -244,7 +244,7 @@ function wrapReference(value: Type<any>): R3Reference {
return {value: wrapped, type: wrapped}; return {value: wrapped, type: wrapped};
} }
function isModuleWithProviders(value: any): value is ModuleWithProviders { function isModuleWithProviders(value: any): value is ModuleWithProviders<{}> {
return (value as{ngModule?: any}).ngModule !== undefined; return (value as{ngModule?: any}).ngModule !== undefined;
} }

View File

@ -34,7 +34,7 @@ export class FormsModule {
*/ */
static withConfig(opts: { static withConfig(opts: {
/** @deprecated as of v6 */ warnOnDeprecatedNgFormSelector?: 'never' | 'once' | 'always', /** @deprecated as of v6 */ warnOnDeprecatedNgFormSelector?: 'never' | 'once' | 'always',
}): ModuleWithProviders { }): ModuleWithProviders<FormsModule> {
return { return {
ngModule: FormsModule, ngModule: FormsModule,
providers: providers:
@ -48,7 +48,7 @@ export class FormsModule {
* An `NgModule` that registers the directives and providers for reactive forms. * An `NgModule` that registers the directives and providers for reactive forms.
* *
* @see [Reactive Forms Guide](/guide/reactive-forms) * @see [Reactive Forms Guide](/guide/reactive-forms)
* *
*/ */
@NgModule({ @NgModule({
declarations: [REACTIVE_DRIVEN_DIRECTIVES], declarations: [REACTIVE_DRIVEN_DIRECTIVES],

View File

@ -70,7 +70,7 @@ export class ServiceWorkerModule {
* workers are not supported by the browser, and the service worker will not be registered. * workers are not supported by the browser, and the service worker will not be registered.
*/ */
static register(script: string, opts: {scope?: string; enabled?: boolean;} = {}): static register(script: string, opts: {scope?: string; enabled?: boolean;} = {}):
ModuleWithProviders { ModuleWithProviders<ServiceWorkerModule> {
return { return {
ngModule: ServiceWorkerModule, ngModule: ServiceWorkerModule,
providers: [ providers: [

View File

@ -1482,11 +1482,11 @@ export declare class HttpClientModule {
} }
export declare class HttpClientXsrfModule { export declare class HttpClientXsrfModule {
static disable(): ModuleWithProviders; static disable(): ModuleWithProviders<HttpClientXsrfModule>;
static withOptions(options?: { static withOptions(options?: {
cookieName?: string; cookieName?: string;
headerName?: string; headerName?: string;
}): ModuleWithProviders; }): ModuleWithProviders<HttpClientXsrfModule>;
} }
export interface HttpDownloadProgressEvent extends HttpProgressEvent { export interface HttpDownloadProgressEvent extends HttpProgressEvent {

View File

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

View File

@ -331,7 +331,7 @@ export declare class FormGroupName extends AbstractFormGroupDirective implements
export declare class FormsModule { export declare class FormsModule {
static withConfig(opts: { warnOnDeprecatedNgFormSelector?: 'never' | 'once' | 'always'; static withConfig(opts: { warnOnDeprecatedNgFormSelector?: 'never' | 'once' | 'always';
}): ModuleWithProviders; }): ModuleWithProviders<FormsModule>;
} }
export declare class MaxLengthValidator implements Validator, OnChanges { export declare class MaxLengthValidator implements Validator, OnChanges {

View File

@ -3,7 +3,7 @@ export declare class ServiceWorkerModule {
static register(script: string, opts?: { static register(script: string, opts?: {
scope?: string; scope?: string;
enabled?: boolean; enabled?: boolean;
}): ModuleWithProviders; }): ModuleWithProviders<ServiceWorkerModule>;
} }
/** @experimental */ /** @experimental */