1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
=== tests/cases/compiler/bindingPatternCannotBeOnlyInferenceSource.ts ===
declare function f<T>(): T;
>f : <T>() => T
const {} = f(); // error (only in strictNullChecks)
>f() : unknown
>f : <T>() => T
const { p1 } = f(); // error
>p1 : any
>f() : unknown
>f : <T>() => T
const [] = f(); // error
>f() : unknown
>f : <T>() => T
const [e1, e2] = f(); // error
>e1 : any
>e2 : any
>f() : unknown
>f : <T>() => T
// Repro from #43605
type Dispatch<A = { type: any; [extraProps: string]: any }> = { <T extends A>(action: T): T };
>Dispatch : Dispatch<A>
>type : any
>extraProps : string
>action : T
type IFuncs = { readonly [key: string]: (...p: any) => void };
>IFuncs : { readonly [key: string]: (...p: any) => void; }
>key : string
>p : any
type IDestructuring<T extends IFuncs> = { readonly [key in keyof T]?: (...p: Parameters<T[key]>) => void };
>IDestructuring : IDestructuring<T>
>p : Parameters<T[key]>
type Destructuring<T extends IFuncs, U extends IDestructuring<T>> = (dispatch: Dispatch<any>, funcs: T) => U;
>Destructuring : Destructuring<T, U>
>dispatch : Dispatch<any>
>funcs : T
const funcs1 = {
>funcs1 : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
>{ funcA: (a: boolean): void => {}, funcB: (b: string, bb: string): void => {}, funcC: (c: number, cc: number, ccc: boolean): void => {},} : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
funcA: (a: boolean): void => {},
>funcA : (a: boolean) => void
>(a: boolean): void => {} : (a: boolean) => void
>a : boolean
funcB: (b: string, bb: string): void => {},
>funcB : (b: string, bb: string) => void
>(b: string, bb: string): void => {} : (b: string, bb: string) => void
>b : string
>bb : string
funcC: (c: number, cc: number, ccc: boolean): void => {},
>funcC : (c: number, cc: number, ccc: boolean) => void
>(c: number, cc: number, ccc: boolean): void => {} : (c: number, cc: number, ccc: boolean) => void
>c : number
>cc : number
>ccc : boolean
};
type TFuncs1 = typeof funcs1;
>TFuncs1 : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
>funcs1 : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
declare function useReduxDispatch1<T extends IDestructuring<TFuncs1>>(destructuring: Destructuring<TFuncs1, T>): T;
>useReduxDispatch1 : <T extends IDestructuring<{ funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }>>(destructuring: Destructuring<TFuncs1, T>) => T
>destructuring : Destructuring<{ funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }, T>
const {} = useReduxDispatch1(
>useReduxDispatch1( (d, f) => ({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), })) : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
>useReduxDispatch1 : <T extends IDestructuring<{ funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }>>(destructuring: Destructuring<{ funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }, T>) => T
(d, f) => ({
>(d, f) => ({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), }) : (d: Dispatch<any>, f: { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }) => { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
>d : Dispatch<any>
>f : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
>({ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), }) : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
>{ funcA: (...p) => d(f.funcA(...p)), // p should be inferrable funcB: (...p) => d(f.funcB(...p)), funcC: (...p) => d(f.funcC(...p)), } : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
funcA: (...p) => d(f.funcA(...p)), // p should be inferrable
>funcA : (a: boolean) => void
>(...p) => d(f.funcA(...p)) : (a: boolean) => void
>p : [a: boolean]
>d(f.funcA(...p)) : void
>d : Dispatch<any>
>f.funcA(...p) : void
>f.funcA : (a: boolean) => void
>f : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
>funcA : (a: boolean) => void
>...p : boolean
>p : [a: boolean]
funcB: (...p) => d(f.funcB(...p)),
>funcB : (b: string, bb: string) => void
>(...p) => d(f.funcB(...p)) : (b: string, bb: string) => void
>p : [b: string, bb: string]
>d(f.funcB(...p)) : void
>d : Dispatch<any>
>f.funcB(...p) : void
>f.funcB : (b: string, bb: string) => void
>f : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
>funcB : (b: string, bb: string) => void
>...p : string
>p : [b: string, bb: string]
funcC: (...p) => d(f.funcC(...p)),
>funcC : (c: number, cc: number, ccc: boolean) => void
>(...p) => d(f.funcC(...p)) : (c: number, cc: number, ccc: boolean) => void
>p : [c: number, cc: number, ccc: boolean]
>d(f.funcC(...p)) : void
>d : Dispatch<any>
>f.funcC(...p) : void
>f.funcC : (c: number, cc: number, ccc: boolean) => void
>f : { funcA: (a: boolean) => void; funcB: (b: string, bb: string) => void; funcC: (c: number, cc: number, ccc: boolean) => void; }
>funcC : (c: number, cc: number, ccc: boolean) => void
>...p : number | boolean
>p : [c: number, cc: number, ccc: boolean]
})
);
|