fix(common): weaken AsyncPipe transform signature (#22169)
The AsyncPipe type signature was changed to allow deferred creation of promises and observalbes that is supported by the implementation by allowing `Promise<T>|null|undefined` and by allowing `Observable<T>|null|undefined`. PR Close #22169
This commit is contained in:
parent
b333919722
commit
be59c3a98c
|
@ -85,8 +85,8 @@ export class AsyncPipe implements OnDestroy, PipeTransform {
|
|||
|
||||
transform<T>(obj: null): null;
|
||||
transform<T>(obj: undefined): undefined;
|
||||
transform<T>(obj: Observable<T>): T|null;
|
||||
transform<T>(obj: Promise<T>): T|null;
|
||||
transform<T>(obj: Observable<T>|null|undefined): T|null;
|
||||
transform<T>(obj: Promise<T>|null|undefined): T|null;
|
||||
transform(obj: Observable<any>|Promise<any>|null|undefined): any {
|
||||
if (!this._obj) {
|
||||
if (obj) {
|
||||
|
|
|
@ -620,12 +620,12 @@ describe('ng type checker', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('regressions ', () => {
|
||||
describe('core', () => {
|
||||
const a = (files: MockFiles, options: ng.AngularCompilerOptions = {}) => {
|
||||
accept(files, {fullTemplateTypeCheck: true, ...options});
|
||||
};
|
||||
|
||||
// #19905
|
||||
// Regression #19905
|
||||
it('should accept an event binding', () => {
|
||||
a({
|
||||
'src/app.component.ts': '',
|
||||
|
@ -655,6 +655,38 @@ describe('ng type checker', () => {
|
|||
});
|
||||
});
|
||||
|
||||
describe('common', () => {
|
||||
const a = (files: MockFiles, options: ng.AngularCompilerOptions = {}) => {
|
||||
accept(files, {fullTemplateTypeCheck: true, ...options});
|
||||
};
|
||||
|
||||
// Regression #19905
|
||||
it('should accept a |undefined or |null parameter for async_pipe', () => {
|
||||
a({
|
||||
'src/app.component.ts': '',
|
||||
'src/lib.ts': '',
|
||||
'src/app.module.ts': `
|
||||
import {NgModule, Component} from '@angular/core';
|
||||
import {CommonModule} from '@angular/common';
|
||||
|
||||
@Component({
|
||||
selector: 'comp',
|
||||
template: '<div>{{ name | async}}</div>'
|
||||
})
|
||||
export class MainComp {
|
||||
name: Promise<string>|undefined;
|
||||
}
|
||||
|
||||
|
||||
@NgModule({
|
||||
declarations: [MainComp],
|
||||
imports: [CommonModule]
|
||||
})
|
||||
export class MainModule {}`
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
describe('with modified quickstart (fullTemplateTypeCheck: false)', () => {
|
||||
addTests({fullTemplateTypeCheck: false});
|
||||
});
|
||||
|
|
|
@ -5,8 +5,8 @@ export declare const APP_BASE_HREF: InjectionToken<string>;
|
|||
export declare class AsyncPipe implements OnDestroy, PipeTransform {
|
||||
constructor(_ref: ChangeDetectorRef);
|
||||
ngOnDestroy(): void;
|
||||
transform<T>(obj: Promise<T>): T | null;
|
||||
transform<T>(obj: Observable<T>): T | null;
|
||||
transform<T>(obj: Promise<T> | null | undefined): T | null;
|
||||
transform<T>(obj: Observable<T> | null | undefined): T | null;
|
||||
transform<T>(obj: undefined): undefined;
|
||||
transform<T>(obj: null): null;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue