Skip to content

Commit f61bc7d

Browse files
authored
fix(compat): Typescript 4.5 inference breaks the PromiseProxy (#3144)
Fixes #3090 #3088
1 parent 8b693e4 commit f61bc7d

File tree

1 file changed

+9
-9
lines changed

1 file changed

+9
-9
lines changed

src/compat/proxy.ts

+9-9
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
import { NgZone } from '@angular/core';
22
import { Observable } from 'rxjs';
33

4-
// tslint:disable:ban-types
5-
type FunctionPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? K : never }[keyof T];
4+
type MyFunction = (...args: any[]) => any;
5+
type FunctionPropertyNames<T> = { [K in keyof T]: T[K] extends MyFunction ? K : never }[keyof T];
6+
type ReturnTypeOrNever<T> = T extends MyFunction ? ReturnType<T> : never;
7+
type ParametersOrNever<T> = T extends MyFunction ? Parameters<T> : never;
68
type PromiseReturningFunctionPropertyNames<T> = {
7-
[K in FunctionPropertyNames<T>]: ReturnType<T[K]> extends Promise<any> ? K : never
9+
[K in FunctionPropertyNames<T>]: ReturnTypeOrNever<T[K]> extends Promise<any> ? K : never
810
}[FunctionPropertyNames<T>];
911
type NonPromiseReturningFunctionPropertyNames<T> = {
10-
[K in FunctionPropertyNames<T>]: ReturnType<T[K]> extends Promise<any> ? never : K
12+
[K in FunctionPropertyNames<T>]: ReturnTypeOrNever<T[K]> extends Promise<any> ? never : K
1113
}[FunctionPropertyNames<T>];
12-
type NonFunctionPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? never : K }[keyof T];
13-
// tslint:enable:ban-types
14+
type NonFunctionPropertyNames<T> = { [K in keyof T]: T[K] extends MyFunction ? never : K }[keyof T];
1415

1516
export type ɵPromiseProxy<T> = { [K in NonFunctionPropertyNames<T>]: Promise<T[K]> } &
16-
{ [K in NonPromiseReturningFunctionPropertyNames<T>]: (...args: Parameters<T[K]>) => Promise<ReturnType<T[K]>> } &
17-
{ [K in PromiseReturningFunctionPropertyNames<T>]: (...args: Parameters<T[K]>) => ReturnType<T[K]> };
18-
17+
{ [K in NonPromiseReturningFunctionPropertyNames<T>]: (...args: ParametersOrNever<T[K]>) => Promise<ReturnTypeOrNever<T[K]>> } &
18+
{ [K in PromiseReturningFunctionPropertyNames<T>]: T[K] };
1919

2020
// DEBUG quick debugger function for inline logging that typescript doesn't complain about
2121
// wrote it for debugging the ɵlazySDKProxy, commenting out for now; should consider exposing a

0 commit comments

Comments
 (0)