Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 4750369

Browse filesBrowse files
authored
fix(42133): fix instantiated undefined type from JS initializer (microsoft#42662)
1 parent c7bac6f commit 4750369
Copy full SHA for 4750369

5 files changed

+59-2Lines changed: 59 additions & 2 deletions

File tree

Expand file treeCollapse file tree
Open diff view settings
Filter options
Expand file treeCollapse file tree
Open diff view settings
Collapse file

‎src/compiler/checker.ts‎

Copy file name to clipboardExpand all lines: src/compiler/checker.ts
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19489,8 +19489,8 @@ namespace ts {
1948919489
}
1949019490

1949119491
function isEmptyArrayLiteralType(type: Type): boolean {
19492-
const elementType = isArrayType(type) ? getTypeArguments(type)[0] : undefined;
19493-
return elementType === undefinedWideningType || elementType === implicitNeverType;
19492+
const elementType = getElementTypeOfArrayType(type);
19493+
return strictNullChecks ? elementType === implicitNeverType : elementType === undefinedWideningType;
1949419494
}
1949519495

1949619496
function isTupleLikeType(type: Type): boolean {
Collapse file

‎tests/baselines/reference/typeFromJSInitializer.errors.txt‎

Copy file name to clipboardExpand all lines: tests/baselines/reference/typeFromJSInitializer.errors.txt
+7Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,11 @@ tests/cases/conformance/salsa/a.js(37,5): error TS2322: Type '"error"' is not as
7272
u = 'ok'
7373

7474
l.push('ok')
75+
76+
/** @type {(v: unknown) => v is undefined} */
77+
const isUndef = v => v === undefined;
78+
const e = [1, undefined];
79+
80+
// should be undefined[]
81+
const g = e.filter(isUndef);
7582

Collapse file

‎tests/baselines/reference/typeFromJSInitializer.symbols‎

Copy file name to clipboardExpand all lines: tests/baselines/reference/typeFromJSInitializer.symbols
+19Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,3 +175,22 @@ l.push('ok')
175175
>l : Symbol(l, Decl(a.js, 45, 3))
176176
>push : Symbol(Array.push, Decl(lib.es5.d.ts, --, --))
177177

178+
/** @type {(v: unknown) => v is undefined} */
179+
const isUndef = v => v === undefined;
180+
>isUndef : Symbol(isUndef, Decl(a.js, 55, 5))
181+
>v : Symbol(v, Decl(a.js, 55, 15))
182+
>v : Symbol(v, Decl(a.js, 55, 15))
183+
>undefined : Symbol(undefined)
184+
185+
const e = [1, undefined];
186+
>e : Symbol(e, Decl(a.js, 56, 5))
187+
>undefined : Symbol(undefined)
188+
189+
// should be undefined[]
190+
const g = e.filter(isUndef);
191+
>g : Symbol(g, Decl(a.js, 59, 5))
192+
>e.filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
193+
>e : Symbol(e, Decl(a.js, 56, 5))
194+
>filter : Symbol(Array.filter, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
195+
>isUndef : Symbol(isUndef, Decl(a.js, 55, 5))
196+
Collapse file

‎tests/baselines/reference/typeFromJSInitializer.types‎

Copy file name to clipboardExpand all lines: tests/baselines/reference/typeFromJSInitializer.types
+24Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -239,3 +239,27 @@ l.push('ok')
239239
>push : (...items: any[]) => number
240240
>'ok' : "ok"
241241

242+
/** @type {(v: unknown) => v is undefined} */
243+
const isUndef = v => v === undefined;
244+
>isUndef : (v: unknown) => v is undefined
245+
>v => v === undefined : (v: unknown) => v is undefined
246+
>v : unknown
247+
>v === undefined : boolean
248+
>v : unknown
249+
>undefined : undefined
250+
251+
const e = [1, undefined];
252+
>e : (number | undefined)[]
253+
>[1, undefined] : (number | undefined)[]
254+
>1 : 1
255+
>undefined : undefined
256+
257+
// should be undefined[]
258+
const g = e.filter(isUndef);
259+
>g : undefined[]
260+
>e.filter(isUndef) : undefined[]
261+
>e.filter : { <S extends number | undefined>(predicate: (value: number | undefined, index: number, array: (number | undefined)[]) => value is S, thisArg?: any): S[]; (predicate: (value: number | undefined, index: number, array: (number | undefined)[]) => unknown, thisArg?: any): (number | undefined)[]; }
262+
>e : (number | undefined)[]
263+
>filter : { <S extends number | undefined>(predicate: (value: number | undefined, index: number, array: (number | undefined)[]) => value is S, thisArg?: any): S[]; (predicate: (value: number | undefined, index: number, array: (number | undefined)[]) => unknown, thisArg?: any): (number | undefined)[]; }
264+
>isUndef : (v: unknown) => v is undefined
265+
Collapse file

‎tests/cases/conformance/salsa/typeFromJSInitializer.ts‎

Copy file name to clipboardExpand all lines: tests/cases/conformance/salsa/typeFromJSInitializer.ts
+7Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,10 @@ u = {}
5757
u = 'ok'
5858

5959
l.push('ok')
60+
61+
/** @type {(v: unknown) => v is undefined} */
62+
const isUndef = v => v === undefined;
63+
const e = [1, undefined];
64+
65+
// should be undefined[]
66+
const g = e.filter(isUndef);

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.