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/conformance/es6/destructuring/destructuringParameterDeclaration4.ts ===
// If the parameter is a rest parameter, the parameter type is any[]
// A type annotation for a rest parameter must denote an array type.
// RestParameter:
// ... Identifier TypeAnnotation(opt)
type arrayString = Array<String>
>arrayString : String[]
type someArray = Array<String> | number[];
>someArray : String[] | number[]
type stringOrNumArray = Array<String|Number>;
>stringOrNumArray : (String | Number)[]
function a0(...x: [number, number, string]) { } // Error, rest parameter must be array type
>a0 : (x_0: number, x_1: number, x_2: string) => void
>x : [number, number, string]
function a1(...x: (number|string)[]) { }
>a1 : (...x: (number | string)[]) => void
>x : (string | number)[]
function a2(...a: someArray) { } // Error, rest parameter must be array type
>a2 : (...a: someArray) => void
>a : someArray
function a3(...b?) { } // Error, can't be optional
>a3 : (...b?: any[]) => void
>b : any[]
function a4(...b = [1,2,3]) { } // Error, can't have initializer
>a4 : (...b?: number[]) => void
>b : number[]
>[1,2,3] : number[]
>1 : 1
>2 : 2
>3 : 3
function a5([a, b, [[c]]]) { }
>a5 : ([a, b, [[c]]]: [any, any, [[any]]]) => void
>a : any
>b : any
>c : any
function a6([a, b, c, ...x]: number[]) { }
>a6 : ([a, b, c, ...x]: number[]) => void
>a : number
>b : number
>c : number
>x : number[]
a1(1, 2, "hello", true); // Error, parameter type is (number|string)[]
>a1(1, 2, "hello", true) : void
>a1 : (...x: (string | number)[]) => void
>1 : 1
>2 : 2
>"hello" : "hello"
>true : true
a1(...array2); // Error parameter type is (number|string)[]
>a1(...array2) : void
>a1 : (...x: (string | number)[]) => void
>...array2 : any
>array2 : any
a5([1, 2, "string", false, true]); // Error, parameter type is [any, any, [[any]]]
>a5([1, 2, "string", false, true]) : void
>a5 : ([a, b, [[c]]]: [any, any, [[any]]]) => void
>[1, 2, "string", false, true] : [number, number, string, boolean, boolean]
>1 : 1
>2 : 2
>"string" : "string"
>false : false
>true : true
a5([1, 2]); // Error, parameter type is [any, any, [[any]]]
>a5([1, 2]) : void
>a5 : ([a, b, [[c]]]: [any, any, [[any]]]) => void
>[1, 2] : [number, number]
>1 : 1
>2 : 2
a6([1, 2, "string"]); // Error, parameter type is number[]
>a6([1, 2, "string"]) : void
>a6 : ([a, b, c, ...x]: number[]) => void
>[1, 2, "string"] : (string | number)[]
>1 : 1
>2 : 2
>"string" : "string"
var temp = [1, 2, 3];
>temp : number[]
>[1, 2, 3] : number[]
>1 : 1
>2 : 2
>3 : 3
class C {
>C : C
constructor(public ...temp) { } // Error, rest parameter can't have properties
>temp : any[]
}
// Rest parameter with generic
function foo1<T extends Number>(...a: T[]) { }
>foo1 : <T extends Number>(...a: T[]) => void
>a : T[]
foo1(1, 2, "string", E1.a, E.b); // Error
>foo1(1, 2, "string", E1.a, E.b) : void
>foo1 : <T extends Number>(...a: T[]) => void
>1 : 1
>2 : 2
>"string" : "string"
>E1.a : any
>E1 : any
>a : any
>E.b : any
>E : any
>b : any
|