@@ -163,10 +163,11 @@ namespace ts {
163
163
}
164
164
165
165
/** Works like Array.prototype.find, returning `undefined` if no element satisfying the predicate is found. */
166
- export function find < T , U extends T > ( array : readonly T [ ] , predicate : ( element : T , index : number ) => element is U ) : U | undefined ;
167
- export function find < T > ( array : readonly T [ ] , predicate : ( element : T , index : number ) => boolean ) : T | undefined ;
168
- export function find < T > ( array : readonly T [ ] , predicate : ( element : T , index : number ) => boolean ) : T | undefined {
169
- for ( let i = 0 ; i < array . length ; i ++ ) {
166
+ export function find < T , U extends T > ( array : readonly T [ ] | undefined , predicate : ( element : T , index : number ) => element is U , startIndex ?: number ) : U | undefined ;
167
+ export function find < T > ( array : readonly T [ ] | undefined , predicate : ( element : T , index : number ) => boolean , startIndex ?: number ) : T | undefined ;
168
+ export function find < T > ( array : readonly T [ ] | undefined , predicate : ( element : T , index : number ) => boolean , startIndex ?: number ) : T | undefined {
169
+ if ( array === undefined ) return undefined ;
170
+ for ( let i = startIndex ?? 0 ; i < array . length ; i ++ ) {
170
171
const value = array [ i ] ;
171
172
if ( predicate ( value , i ) ) {
172
173
return value ;
@@ -175,10 +176,11 @@ namespace ts {
175
176
return undefined ;
176
177
}
177
178
178
- export function findLast < T , U extends T > ( array : readonly T [ ] , predicate : ( element : T , index : number ) => element is U ) : U | undefined ;
179
- export function findLast < T > ( array : readonly T [ ] , predicate : ( element : T , index : number ) => boolean ) : T | undefined ;
180
- export function findLast < T > ( array : readonly T [ ] , predicate : ( element : T , index : number ) => boolean ) : T | undefined {
181
- for ( let i = array . length - 1 ; i >= 0 ; i -- ) {
179
+ export function findLast < T , U extends T > ( array : readonly T [ ] | undefined , predicate : ( element : T , index : number ) => element is U , startIndex ?: number ) : U | undefined ;
180
+ export function findLast < T > ( array : readonly T [ ] | undefined , predicate : ( element : T , index : number ) => boolean , startIndex ?: number ) : T | undefined ;
181
+ export function findLast < T > ( array : readonly T [ ] | undefined , predicate : ( element : T , index : number ) => boolean , startIndex ?: number ) : T | undefined {
182
+ if ( array === undefined ) return undefined ;
183
+ for ( let i = startIndex ?? array . length - 1 ; i >= 0 ; i -- ) {
182
184
const value = array [ i ] ;
183
185
if ( predicate ( value , i ) ) {
184
186
return value ;
@@ -188,17 +190,19 @@ namespace ts {
188
190
}
189
191
190
192
/** Works like Array.prototype.findIndex, returning `-1` if no element satisfying the predicate is found. */
191
- export function findIndex < T > ( array : readonly T [ ] , predicate : ( element : T , index : number ) => boolean , startIndex ?: number ) : number {
192
- for ( let i = startIndex || 0 ; i < array . length ; i ++ ) {
193
+ export function findIndex < T > ( array : readonly T [ ] | undefined , predicate : ( element : T , index : number ) => boolean , startIndex ?: number ) : number {
194
+ if ( array === undefined ) return - 1 ;
195
+ for ( let i = startIndex ?? 0 ; i < array . length ; i ++ ) {
193
196
if ( predicate ( array [ i ] , i ) ) {
194
197
return i ;
195
198
}
196
199
}
197
200
return - 1 ;
198
201
}
199
202
200
- export function findLastIndex < T > ( array : readonly T [ ] , predicate : ( element : T , index : number ) => boolean , startIndex ?: number ) : number {
201
- for ( let i = startIndex === undefined ? array . length - 1 : startIndex ; i >= 0 ; i -- ) {
203
+ export function findLastIndex < T > ( array : readonly T [ ] | undefined , predicate : ( element : T , index : number ) => boolean , startIndex ?: number ) : number {
204
+ if ( array === undefined ) return - 1 ;
205
+ for ( let i = startIndex ?? array . length - 1 ; i >= 0 ; i -- ) {
202
206
if ( predicate ( array [ i ] , i ) ) {
203
207
return i ;
204
208
}
@@ -1079,8 +1083,8 @@ namespace ts {
1079
1083
/**
1080
1084
* Returns the first element of an array if non-empty, `undefined` otherwise.
1081
1085
*/
1082
- export function firstOrUndefined < T > ( array : readonly T [ ] ) : T | undefined {
1083
- return array . length === 0 ? undefined : array [ 0 ] ;
1086
+ export function firstOrUndefined < T > ( array : readonly T [ ] | undefined ) : T | undefined {
1087
+ return array === undefined || array . length === 0 ? undefined : array [ 0 ] ;
1084
1088
}
1085
1089
1086
1090
export function first < T > ( array : readonly T [ ] ) : T {
@@ -1091,8 +1095,8 @@ namespace ts {
1091
1095
/**
1092
1096
* Returns the last element of an array if non-empty, `undefined` otherwise.
1093
1097
*/
1094
- export function lastOrUndefined < T > ( array : readonly T [ ] ) : T | undefined {
1095
- return array . length === 0 ? undefined : array [ array . length - 1 ] ;
1098
+ export function lastOrUndefined < T > ( array : readonly T [ ] | undefined ) : T | undefined {
1099
+ return array === undefined || array . length === 0 ? undefined : array [ array . length - 1 ] ;
1096
1100
}
1097
1101
1098
1102
export function last < T > ( array : readonly T [ ] ) : T {
0 commit comments