File: restTuplesFromContextualTypes.errors.txt

package info (click to toggle)
node-typescript 5.0.4%2Bds1-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 459,116 kB
  • sloc: javascript: 1,972,754; makefile: 6; sh: 1
file content (113 lines) | stat: -rw-r--r-- 4,192 bytes parent folder | download | duplicates (3)
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
tests/cases/conformance/types/rest/restTuplesFromContextualTypes.ts(56,7): error TS2345: Argument of type '(a: number, b: T[0], ...x: T[number][]) => void' is not assignable to parameter of type '(x: number, ...args: T) => void'.
  Types of parameters 'b' and 'args' are incompatible.
    Type 'T' is not assignable to type '[b: T[0], ...x: T[number][]]'.
      Type 'any[]' is not assignable to type '[b: T[0], ...x: T[number][]]'.
        Source provides no match for required element at position 0 in target.


==== tests/cases/conformance/types/rest/restTuplesFromContextualTypes.ts (1 errors) ====
    declare const t1: [number, boolean, string];
    
    (function (a, b, c){})(...t1);
    (function (...x){})(...t1);
    (function (a, ...x){})(...t1);
    (function (a, b, ...x){})(...t1);
    (function (a, b, c, ...x){})(...t1);
    
    declare function f1(cb: (...args: typeof t1) => void): void;
    
    f1((a, b, c) => {})
    f1((...x) => {})
    f1((a, ...x) => {})
    f1((a, b, ...x) => {})
    f1((a, b, c, ...x) => {})
    
    declare const t2: [number, boolean, ...string[]];
    
    (function (a, b, c){})(...t2);
    (function (...x){})(...t2);
    (function (a, ...x){})(...t2);
    (function (a, b, ...x){})(...t2);
    (function (a, b, c, ...x){})(...t2);
    
    declare function f2(cb: (...args: typeof t2) => void): void;
    
    f2((a, b, c) => {})
    f2((...x) => {})
    f2((a, ...x) => {})
    f2((a, b, ...x) => {})
    f2((a, b, c, ...x) => {})
    
    declare const t3: [boolean, ...string[]];
    
    (function (a, b, c){})(1, ...t3);
    (function (...x){})(1, ...t3);
    (function (a, ...x){})(1, ...t3);
    (function (a, b, ...x){})(1, ...t3);
    (function (a, b, c, ...x){})(1, ...t3);
    
    declare function f3(cb: (x: number, ...args: typeof t3) => void): void;
    
    f3((a, b, c) => {})
    f3((...x) => {})
    f3((a, ...x) => {})
    f3((a, b, ...x) => {})
    f3((a, b, c, ...x) => {})
    
    function f4<T extends any[]>(t: T) {
        (function(...x){})(...t);
        (function(a, ...x){})(1, ...t);
        (function(a, ...x){})(1, 2, ...t);
        function f(cb: (x: number, ...args: T) => void) {}
        f((...x) => {});
        f((a, ...x) => {});
        f((a, b, ...x) => {});
          ~~~~~~~~~~~~~~~~~~
!!! error TS2345: Argument of type '(a: number, b: T[0], ...x: T[number][]) => void' is not assignable to parameter of type '(x: number, ...args: T) => void'.
!!! error TS2345:   Types of parameters 'b' and 'args' are incompatible.
!!! error TS2345:     Type 'T' is not assignable to type '[b: T[0], ...x: T[number][]]'.
!!! error TS2345:       Type 'any[]' is not assignable to type '[b: T[0], ...x: T[number][]]'.
!!! error TS2345:         Source provides no match for required element at position 0 in target.
    }
    
    declare function f5<T extends any[], U>(f: (...args: T) => U): (...args: T) => U;
    
    let g0 = f5(() => "hello");
    let g1 = f5((x, y) => 42);
    let g2 = f5((x: number, y) => 42);
    let g3 = f5((x: number, y: number) => x + y);
    let g4 = f5((...args) => true);
    
    declare function pipe<A extends any[], B, C>(f: (...args: A) => B, g: (x: B) => C): (...args: A) => C;
    
    let g5 = pipe(() => true, b => 42);
    let g6 = pipe(x => "hello", s => s.length);
    let g7 = pipe((x, y) => 42, x => "" + x);
    let g8 = pipe((x: number, y: string) => 42, x => "" + x);
    
    // Repro from #25288
    
    declare var tuple: [number, string];
    (function foo(a, b){}(...tuple));
    
    // Repro from #25289
    
    declare function take(cb: (a: number, b: string) => void): void;
    
    (function foo(...rest){}(1, ''));
    take(function(...rest){});
    
    // Repro from #29833
    
    type ArgsUnion = [number, string] | [number, Error];
    type TupleUnionFunc = (...params: ArgsUnion) => number;
    
    const funcUnionTupleNoRest: TupleUnionFunc = (num, strOrErr) => {
      return num;
    };
    
    const funcUnionTupleRest: TupleUnionFunc = (...params) => {
      const [num, strOrErr] = params;
      return num;
    };