From 723ffab8df671a7960bf05e2711f43f9de2398a6 Mon Sep 17 00:00:00 2001 From: Kitson Kelly Date: Wed, 28 Sep 2016 21:50:33 +0100 Subject: [PATCH] Improve Array.prototype.slice typing --- src/lib/es5.d.ts | 3 ++- tests/baselines/reference/arraySlice.js | 8 ++++++++ tests/baselines/reference/arraySlice.symbols | 9 +++++++++ tests/baselines/reference/arraySlice.types | 12 +++++++++++ tests/baselines/reference/invalidSplice.types | 4 ++-- ...ymousTypeNotReferencingTypeParameter.types | 20 +++++++++---------- tests/cases/compiler/arraySlice.ts | 2 ++ 7 files changed, 45 insertions(+), 13 deletions(-) create mode 100644 tests/baselines/reference/arraySlice.js create mode 100644 tests/baselines/reference/arraySlice.symbols create mode 100644 tests/baselines/reference/arraySlice.types create mode 100644 tests/cases/compiler/arraySlice.ts diff --git a/src/lib/es5.d.ts b/src/lib/es5.d.ts index ce719668acf..8a9eeaba57c 100644 --- a/src/lib/es5.d.ts +++ b/src/lib/es5.d.ts @@ -1156,8 +1156,9 @@ interface Array { /** * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. * @param start The zero-based location in the array from which to start removing elements. + * @param deleteCount The number of elements to remove. */ - splice(start: number): T[]; + splice(start: number, deleteCount?: number): T[]; /** * Removes elements from an array and, if necessary, inserts new elements in their place, returning the deleted elements. * @param start The zero-based location in the array from which to start removing elements. diff --git a/tests/baselines/reference/arraySlice.js b/tests/baselines/reference/arraySlice.js new file mode 100644 index 00000000000..a5e4ba1546e --- /dev/null +++ b/tests/baselines/reference/arraySlice.js @@ -0,0 +1,8 @@ +//// [arraySlice.ts] +var arr: string[] | number[]; +arr.splice(1, 1); + + +//// [arraySlice.js] +var arr; +arr.splice(1, 1); diff --git a/tests/baselines/reference/arraySlice.symbols b/tests/baselines/reference/arraySlice.symbols new file mode 100644 index 00000000000..3b6545f9349 --- /dev/null +++ b/tests/baselines/reference/arraySlice.symbols @@ -0,0 +1,9 @@ +=== tests/cases/compiler/arraySlice.ts === +var arr: string[] | number[]; +>arr : Symbol(arr, Decl(arraySlice.ts, 0, 3)) + +arr.splice(1, 1); +>arr.splice : Symbol(splice, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) +>arr : Symbol(arr, Decl(arraySlice.ts, 0, 3)) +>splice : Symbol(splice, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --)) + diff --git a/tests/baselines/reference/arraySlice.types b/tests/baselines/reference/arraySlice.types new file mode 100644 index 00000000000..d1ee482ccaa --- /dev/null +++ b/tests/baselines/reference/arraySlice.types @@ -0,0 +1,12 @@ +=== tests/cases/compiler/arraySlice.ts === +var arr: string[] | number[]; +>arr : string[] | number[] + +arr.splice(1, 1); +>arr.splice(1, 1) : string[] | number[] +>arr.splice : { (start: number, deleteCount?: number): string[]; (start: number, deleteCount: number, ...items: string[]): string[]; } | { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; } +>arr : string[] | number[] +>splice : { (start: number, deleteCount?: number): string[]; (start: number, deleteCount: number, ...items: string[]): string[]; } | { (start: number, deleteCount?: number): number[]; (start: number, deleteCount: number, ...items: number[]): number[]; } +>1 : 1 +>1 : 1 + diff --git a/tests/baselines/reference/invalidSplice.types b/tests/baselines/reference/invalidSplice.types index 876846d3da9..9ff59021725 100644 --- a/tests/baselines/reference/invalidSplice.types +++ b/tests/baselines/reference/invalidSplice.types @@ -2,9 +2,9 @@ var arr = [].splice(0,3,4,5); >arr : any[] >[].splice(0,3,4,5) : any[] ->[].splice : { (start: number): any[]; (start: number, deleteCount: number, ...items: any[]): any[]; } +>[].splice : { (start: number, deleteCount?: number): any[]; (start: number, deleteCount: number, ...items: any[]): any[]; } >[] : undefined[] ->splice : { (start: number): any[]; (start: number, deleteCount: number, ...items: any[]): any[]; } +>splice : { (start: number, deleteCount?: number): any[]; (start: number, deleteCount: number, ...items: any[]): any[]; } >0 : 0 >3 : 3 >4 : 4 diff --git a/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.types b/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.types index f2bd83674cd..127a8d930c5 100644 --- a/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.types +++ b/tests/baselines/reference/staticAnonymousTypeNotReferencingTypeParameter.types @@ -364,9 +364,9 @@ class ListWrapper { >value : T >T : T >list.splice(index, 0, value) : T[] ->list.splice : { (start: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } +>list.splice : { (start: number, deleteCount?: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } >list : T[] ->splice : { (start: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } +>splice : { (start: number, deleteCount?: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } >index : number >0 : 0 >value : T @@ -389,9 +389,9 @@ class ListWrapper { list.splice(index, 1); >list.splice(index, 1) : T[] ->list.splice : { (start: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } +>list.splice : { (start: number, deleteCount?: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } >list : T[] ->splice : { (start: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } +>splice : { (start: number, deleteCount?: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } >index : number >1 : 1 @@ -431,9 +431,9 @@ class ListWrapper { list.splice(index, 1); >list.splice(index, 1) : T[] ->list.splice : { (start: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } +>list.splice : { (start: number, deleteCount?: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } >list : T[] ->splice : { (start: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } +>splice : { (start: number, deleteCount?: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } >index : number >1 : 1 } @@ -464,9 +464,9 @@ class ListWrapper { list.splice(index, 1); >list.splice(index, 1) : T[] ->list.splice : { (start: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } +>list.splice : { (start: number, deleteCount?: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } >list : T[] ->splice : { (start: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } +>splice : { (start: number, deleteCount?: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } >index : number >1 : 1 @@ -603,9 +603,9 @@ class ListWrapper { >length : number >T : T >l.splice(from, length) : T[] ->l.splice : { (start: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } +>l.splice : { (start: number, deleteCount?: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } >l : T[] ->splice : { (start: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } +>splice : { (start: number, deleteCount?: number): T[]; (start: number, deleteCount: number, ...items: T[]): T[]; } >from : number >length : number diff --git a/tests/cases/compiler/arraySlice.ts b/tests/cases/compiler/arraySlice.ts new file mode 100644 index 00000000000..d2c5c974a23 --- /dev/null +++ b/tests/cases/compiler/arraySlice.ts @@ -0,0 +1,2 @@ +var arr: string[] | number[]; +arr.splice(1, 1);