File: destructuringParameterDeclaration1ES5iterable.errors.txt

package info (click to toggle)
node-typescript 3.3.3333-1
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 324,548 kB
  • sloc: makefile: 6; sh: 3
file content (120 lines) | stat: -rw-r--r-- 6,055 bytes parent folder | download
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
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration1ES5iterable.ts(12,4): error TS2345: Argument of type '[number, number, string[][], number]' is not assignable to parameter of type '[number, number, string[][]]'.
  Types of property 'length' are incompatible.
    Type '4' is not assignable to type '3'.
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration1ES5iterable.ts(57,4): error TS2345: Argument of type '[number, number, [[string]], boolean, boolean]' is not assignable to parameter of type '[any, any, [[any]]]'.
  Types of property 'length' are incompatible.
    Type '5' is not assignable to type '3'.
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration1ES5iterable.ts(62,10): error TS2393: Duplicate function implementation.
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration1ES5iterable.ts(63,10): error TS2393: Duplicate function implementation.


==== tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration1ES5iterable.ts (4 errors) ====
    // A parameter declaration may specify either an identifier or a binding pattern.
    // The identifiers specified in parameter declarations and binding patterns
    // in a parameter list must be unique within that parameter list.
    
    // If the declaration includes a type annotation, the parameter is of that type
    function a1([a, b, [[c]]]: [number, number, string[][]]) { }
    function a2(o: { x: number, a: number }) { }
    function a3({j, k, l: {m, n}, q: [a, b, c]}: { j: number, k: string, l: { m: boolean, n: number }, q: (number|string)[] }) { };
    function a4({x, a}: { x: number, a: number }) { }
    
    a1([1, 2, [["world"]]]);
    a1([1, 2, [["world"]], 3]);
       ~~~~~~~~~~~~~~~~~~~~~~
!!! error TS2345: Argument of type '[number, number, string[][], number]' is not assignable to parameter of type '[number, number, string[][]]'.
!!! error TS2345:   Types of property 'length' are incompatible.
!!! error TS2345:     Type '4' is not assignable to type '3'.
    
    // If the declaration includes an initializer expression (which is permitted only
    // when the parameter list occurs in conjunction with a function body),
    // the parameter type is the widened form (section 3.11) of the type of the initializer expression.
    
    function b1(z = [undefined, null]) { };
    function b2(z = null, o = { x: 0, y: undefined }) { }
    function b3({z: {x, y: {j}}} = { z: { x: "hi", y: { j: 1 } } }) { }
    
    interface F1 {
        b5(z, y, [, a, b], {p, m: { q, r}});
    }
    
    function b6([a, z, y] = [undefined, null, undefined]) { }
    function b7([[a], b, [[c, d]]] = [[undefined], undefined, [[undefined, undefined]]]) { }
    
    b1([1, 2, 3]);  // z is widen to the type any[]
    b2("string", { x: 200, y: "string" });
    b2("string", { x: 200, y: true });
    b6(["string", 1, 2]);                    // Shouldn't be an error
    b7([["string"], 1, [[true, false]]]);    // Shouldn't be an error
    
    
    // If the declaration specifies a binding pattern, the parameter type is the implied type of that binding pattern (section 5.1.3)
    enum Foo { a }
    function c0({z: {x, y: {j}}}) { }
    function c1({z} = { z: 10 }) { }
    function c2({z = 10}) { }
    function c3({b}: { b: number|string} = { b: "hello" }) { }
    function c5([a, b, [[c]]]) { }
    function c6([a, b, [[c=1]]]) { }
    
    c0({z : { x: 1, y: { j: "world" } }});      // Implied type is { z: {x: any, y: {j: any}} }
    c0({z : { x: "string", y: { j: true } }});  // Implied type is { z: {x: any, y: {j: any}} }
    
    c1();             // Implied type is {z:number}?
    c1({ z: 1 })      // Implied type is {z:number}?
    
    c2({});         // Implied type is {z?: number}
    c2({z:1});      // Implied type is {z?: number}
    
    c3({ b: 1 });     // Implied type is { b: number|string }.
    
    c5([1, 2, [["string"]]]);               // Implied type is is [any, any, [[any]]]
    c5([1, 2, [["string"]], false, true]);  // Implied type is is [any, any, [[any]]]
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS2345: Argument of type '[number, number, [[string]], boolean, boolean]' is not assignable to parameter of type '[any, any, [[any]]]'.
!!! error TS2345:   Types of property 'length' are incompatible.
!!! error TS2345:     Type '5' is not assignable to type '3'.
    
    // A parameter can be marked optional by following its name or binding pattern with a question mark (?)
    // or by including an initializer.
    
    function d0(x?) { }
             ~~
!!! error TS2393: Duplicate function implementation.
    function d0(x = 10) { }
             ~~
!!! error TS2393: Duplicate function implementation.
    
    interface F2 {
        d3([a, b, c]?);
        d4({x, y, z}?);
        e0([a, b, c]);
    }
    
    class C2 implements F2 {
        constructor() { }
        d3() { }
        d4() { }
        e0([a, b, c]) { }
    }
    
    class C3 implements F2 {
        d3([a, b, c]) { }
        d4({x, y, z}) { }
        e0([a, b, c]) { }
    }
    
    
    function d5({x, y} = { x: 1, y: 2 }) { }
    d5();  // Parameter is optional as its declaration included an initializer
    
    // Destructuring parameter declarations do not permit type annotations on the individual binding patterns,
    // as such annotations would conflict with the already established meaning of colons in object literals.
    // Type annotations must instead be written on the top- level parameter declaration
    
    function e1({x: number}) { }  // x has type any NOT number
    function e2({x}: { x: number }) { }  // x is type number
    function e3({x}: { x?: number }) { }  // x is an optional with type number
    function e4({x: [number,string,any] }) { }  // x has type [any, any, any]
    function e5({x: [a, b, c]}: { x: [number, number, number] }) { }  // x has type [any, any, any]