Skip to content

Commit df54a3d

Browse files
authored
Add non-generic fallback overloads for TypedArray constructors (#60934)
1 parent e973805 commit df54a3d

File tree

3 files changed

+24
-3
lines changed

3 files changed

+24
-3
lines changed

src/lib/es2020.bigint.d.ts

+4-2
Original file line numberDiff line numberDiff line change
@@ -373,6 +373,7 @@ interface BigInt64ArrayConstructor {
373373
new (length?: number): BigInt64Array<ArrayBuffer>;
374374
new (array: ArrayLike<bigint> | Iterable<bigint>): BigInt64Array<ArrayBuffer>;
375375
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): BigInt64Array<TArrayBuffer>;
376+
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): BigInt64Array<ArrayBuffer>;
376377
new (array: ArrayLike<bigint> | ArrayBuffer): BigInt64Array<ArrayBuffer>;
377378

378379
/** The size in bytes of each element in the array. */
@@ -650,6 +651,7 @@ interface BigUint64ArrayConstructor {
650651
new (length?: number): BigUint64Array<ArrayBuffer>;
651652
new (array: ArrayLike<bigint> | Iterable<bigint>): BigUint64Array<ArrayBuffer>;
652653
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): BigUint64Array<TArrayBuffer>;
654+
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): BigUint64Array<ArrayBuffer>;
653655
new (array: ArrayLike<bigint> | ArrayBuffer): BigUint64Array<ArrayBuffer>;
654656

655657
/** The size in bytes of each element in the array. */
@@ -667,8 +669,8 @@ interface BigUint64ArrayConstructor {
667669
* @param mapfn A mapping function to call on every element of the array.
668670
* @param thisArg Value of 'this' used to invoke the mapfn.
669671
*/
670-
from(arrayLike: ArrayLike<bigint>): BigUint64Array;
671-
from<U>(arrayLike: ArrayLike<U>, mapfn: (v: U, k: number) => bigint, thisArg?: any): BigUint64Array;
672+
from(arrayLike: ArrayLike<bigint>): BigUint64Array<ArrayBuffer>;
673+
from<U>(arrayLike: ArrayLike<U>, mapfn: (v: U, k: number) => bigint, thisArg?: any): BigUint64Array<ArrayBuffer>;
672674
}
673675
declare var BigUint64Array: BigUint64ArrayConstructor;
674676

src/lib/es5.d.ts

+9
Original file line numberDiff line numberDiff line change
@@ -2103,6 +2103,7 @@ interface Int8ArrayConstructor {
21032103
new (length: number): Int8Array<ArrayBuffer>;
21042104
new (array: ArrayLike<number>): Int8Array<ArrayBuffer>;
21052105
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Int8Array<TArrayBuffer>;
2106+
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int8Array<ArrayBuffer>;
21062107
new (array: ArrayLike<number> | ArrayBuffer): Int8Array<ArrayBuffer>;
21072108

21082109
/**
@@ -2384,6 +2385,7 @@ interface Uint8ArrayConstructor {
23842385
new (length: number): Uint8Array<ArrayBuffer>;
23852386
new (array: ArrayLike<number>): Uint8Array<ArrayBuffer>;
23862387
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Uint8Array<TArrayBuffer>;
2388+
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint8Array<ArrayBuffer>;
23872389
new (array: ArrayLike<number> | ArrayBuffer): Uint8Array<ArrayBuffer>;
23882390

23892391
/**
@@ -2665,6 +2667,7 @@ interface Uint8ClampedArrayConstructor {
26652667
new (length: number): Uint8ClampedArray<ArrayBuffer>;
26662668
new (array: ArrayLike<number>): Uint8ClampedArray<ArrayBuffer>;
26672669
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Uint8ClampedArray<TArrayBuffer>;
2670+
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint8ClampedArray<ArrayBuffer>;
26682671
new (array: ArrayLike<number> | ArrayBuffer): Uint8ClampedArray<ArrayBuffer>;
26692672

26702673
/**
@@ -2945,6 +2948,7 @@ interface Int16ArrayConstructor {
29452948
new (length: number): Int16Array<ArrayBuffer>;
29462949
new (array: ArrayLike<number>): Int16Array<ArrayBuffer>;
29472950
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Int16Array<TArrayBuffer>;
2951+
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int16Array<ArrayBuffer>;
29482952
new (array: ArrayLike<number> | ArrayBuffer): Int16Array<ArrayBuffer>;
29492953

29502954
/**
@@ -3226,6 +3230,7 @@ interface Uint16ArrayConstructor {
32263230
new (length: number): Uint16Array<ArrayBuffer>;
32273231
new (array: ArrayLike<number>): Uint16Array<ArrayBuffer>;
32283232
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Uint16Array<TArrayBuffer>;
3233+
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint16Array<ArrayBuffer>;
32293234
new (array: ArrayLike<number> | ArrayBuffer): Uint16Array<ArrayBuffer>;
32303235

32313236
/**
@@ -3506,6 +3511,7 @@ interface Int32ArrayConstructor {
35063511
new (length: number): Int32Array<ArrayBuffer>;
35073512
new (array: ArrayLike<number>): Int32Array<ArrayBuffer>;
35083513
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Int32Array<TArrayBuffer>;
3514+
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int32Array<ArrayBuffer>;
35093515
new (array: ArrayLike<number> | ArrayBuffer): Int32Array<ArrayBuffer>;
35103516

35113517
/**
@@ -3786,6 +3792,7 @@ interface Uint32ArrayConstructor {
37863792
new (length: number): Uint32Array<ArrayBuffer>;
37873793
new (array: ArrayLike<number>): Uint32Array<ArrayBuffer>;
37883794
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Uint32Array<TArrayBuffer>;
3795+
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint32Array<ArrayBuffer>;
37893796
new (array: ArrayLike<number> | ArrayBuffer): Uint32Array<ArrayBuffer>;
37903797

37913798
/**
@@ -4067,6 +4074,7 @@ interface Float32ArrayConstructor {
40674074
new (length: number): Float32Array<ArrayBuffer>;
40684075
new (array: ArrayLike<number>): Float32Array<ArrayBuffer>;
40694076
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Float32Array<TArrayBuffer>;
4077+
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float32Array<ArrayBuffer>;
40704078
new (array: ArrayLike<number> | ArrayBuffer): Float32Array<ArrayBuffer>;
40714079

40724080
/**
@@ -4348,6 +4356,7 @@ interface Float64ArrayConstructor {
43484356
new (length: number): Float64Array<ArrayBuffer>;
43494357
new (array: ArrayLike<number>): Float64Array<ArrayBuffer>;
43504358
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Float64Array<TArrayBuffer>;
4359+
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float64Array<ArrayBuffer>;
43514360
new (array: ArrayLike<number> | ArrayBuffer): Float64Array<ArrayBuffer>;
43524361

43534362
/**

tests/cases/compiler/typedArrayConstructorOverloads.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,19 @@
55
// https://github.com/microsoft/TypeScript/issues/60367
66

77
type TypedArrayConstructor =
8+
| Int8ArrayConstructor
9+
| Uint8ArrayConstructor
10+
| Uint8ClampedArrayConstructor
11+
| Int16ArrayConstructor
12+
| Uint16ArrayConstructor
13+
| Int32ArrayConstructor
14+
| Uint32ArrayConstructor
15+
| Float32ArrayConstructor
816
| Float64ArrayConstructor
917
| BigInt64ArrayConstructor
18+
| BigUint64ArrayConstructor
1019

1120
export function makeTypedArray(buffer: ArrayBuffer, ctr: TypedArrayConstructor) {
12-
return new ctr(buffer);
21+
new ctr(buffer);
22+
new ctr(buffer, 0, 0);
1323
}

0 commit comments

Comments
 (0)