Skip to content

Commit f10c7cc

Browse files
author
John Vilk
committed
Change ArrayBuffer.isView declaration to type guard for ArrayBufferView.
Also adds a test that checks that `ArrayBuffer.isView` appropriately narrows its argument to `ArrayBufferView`. Fixes microsoft#5308.
1 parent 0b580c4 commit f10c7cc

File tree

5 files changed

+54
-1
lines changed

5 files changed

+54
-1
lines changed

src/lib/core.d.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1210,7 +1210,7 @@ interface ArrayBuffer {
12101210
interface ArrayBufferConstructor {
12111211
prototype: ArrayBuffer;
12121212
new (byteLength: number): ArrayBuffer;
1213-
isView(arg: any): boolean;
1213+
isView(arg: any): arg is ArrayBufferView;
12141214
}
12151215
declare var ArrayBuffer: ArrayBufferConstructor;
12161216

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
//// [arrayBufferIsViewNarrowsType.ts]
2+
var obj: Object;
3+
if (ArrayBuffer.isView(obj)) {
4+
// isView should be a guard that narrows type to ArrayBufferView.
5+
var ab: ArrayBufferView = obj;
6+
}
7+
8+
//// [arrayBufferIsViewNarrowsType.js]
9+
var obj;
10+
if (ArrayBuffer.isView(obj)) {
11+
// isView should be a guard that narrows type to ArrayBufferView.
12+
var ab = obj;
13+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
=== tests/cases/compiler/arrayBufferIsViewNarrowsType.ts ===
2+
var obj: Object;
3+
>obj : Symbol(obj, Decl(arrayBufferIsViewNarrowsType.ts, 0, 3))
4+
>Object : Symbol(Object, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
5+
6+
if (ArrayBuffer.isView(obj)) {
7+
>ArrayBuffer.isView : Symbol(ArrayBufferConstructor.isView, Decl(lib.d.ts, --, --))
8+
>ArrayBuffer : Symbol(ArrayBuffer, Decl(lib.d.ts, --, --), Decl(lib.d.ts, --, --))
9+
>isView : Symbol(ArrayBufferConstructor.isView, Decl(lib.d.ts, --, --))
10+
>obj : Symbol(obj, Decl(arrayBufferIsViewNarrowsType.ts, 0, 3))
11+
12+
// isView should be a guard that narrows type to ArrayBufferView.
13+
var ab: ArrayBufferView = obj;
14+
>ab : Symbol(ab, Decl(arrayBufferIsViewNarrowsType.ts, 3, 7))
15+
>ArrayBufferView : Symbol(ArrayBufferView, Decl(lib.d.ts, --, --))
16+
>obj : Symbol(obj, Decl(arrayBufferIsViewNarrowsType.ts, 0, 3))
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
=== tests/cases/compiler/arrayBufferIsViewNarrowsType.ts ===
2+
var obj: Object;
3+
>obj : Object
4+
>Object : Object
5+
6+
if (ArrayBuffer.isView(obj)) {
7+
>ArrayBuffer.isView(obj) : boolean
8+
>ArrayBuffer.isView : (arg: any) => arg is ArrayBufferView
9+
>ArrayBuffer : ArrayBufferConstructor
10+
>isView : (arg: any) => arg is ArrayBufferView
11+
>obj : Object
12+
13+
// isView should be a guard that narrows type to ArrayBufferView.
14+
var ab: ArrayBufferView = obj;
15+
>ab : ArrayBufferView
16+
>ArrayBufferView : ArrayBufferView
17+
>obj : ArrayBufferView
18+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
var obj: Object;
2+
if (ArrayBuffer.isView(obj)) {
3+
// isView should be a guard that narrows type to ArrayBufferView.
4+
var ab: ArrayBufferView = obj;
5+
}

0 commit comments

Comments
 (0)