Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions tsc/internal/bundled/libs/lib.es2015.iterable.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,7 @@ interface Int8Array<TArrayBuffer extends ArrayBufferLike> {

interface Int8ArrayConstructor {
new (elements: Iterable<number>): Int8Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(elements: Iterable<number>): Int8Array<TArrayBuffer>;

/**
* Creates an array from an array-like or iterable object.
Expand Down Expand Up @@ -327,6 +328,7 @@ interface Uint8Array<TArrayBuffer extends ArrayBufferLike> {

interface Uint8ArrayConstructor {
new (elements: Iterable<number>): Uint8Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(elements: Iterable<number>): Uint8Array<TArrayBuffer>;

/**
* Creates an array from an array-like or iterable object.
Expand Down Expand Up @@ -364,6 +366,7 @@ interface Uint8ClampedArray<TArrayBuffer extends ArrayBufferLike> {

interface Uint8ClampedArrayConstructor {
new (elements: Iterable<number>): Uint8ClampedArray<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(elements: Iterable<number>): Uint8ClampedArray<TArrayBuffer>;

/**
* Creates an array from an array-like or iterable object.
Expand Down Expand Up @@ -400,6 +403,7 @@ interface Int16Array<TArrayBuffer extends ArrayBufferLike> {

interface Int16ArrayConstructor {
new (elements: Iterable<number>): Int16Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(elements: Iterable<number>): Int16Array<TArrayBuffer>;

/**
* Creates an array from an array-like or iterable object.
Expand Down Expand Up @@ -437,6 +441,7 @@ interface Uint16Array<TArrayBuffer extends ArrayBufferLike> {

interface Uint16ArrayConstructor {
new (elements: Iterable<number>): Uint16Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(elements: Iterable<number>): Uint16Array<TArrayBuffer>;

/**
* Creates an array from an array-like or iterable object.
Expand Down Expand Up @@ -474,6 +479,7 @@ interface Int32Array<TArrayBuffer extends ArrayBufferLike> {

interface Int32ArrayConstructor {
new (elements: Iterable<number>): Int32Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(elements: Iterable<number>): Int32Array<TArrayBuffer>;

/**
* Creates an array from an array-like or iterable object.
Expand Down Expand Up @@ -511,6 +517,7 @@ interface Uint32Array<TArrayBuffer extends ArrayBufferLike> {

interface Uint32ArrayConstructor {
new (elements: Iterable<number>): Uint32Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(elements: Iterable<number>): Uint32Array<TArrayBuffer>;

/**
* Creates an array from an array-like or iterable object.
Expand Down Expand Up @@ -548,6 +555,7 @@ interface Float32Array<TArrayBuffer extends ArrayBufferLike> {

interface Float32ArrayConstructor {
new (elements: Iterable<number>): Float32Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(elements: Iterable<number>): Float32Array<TArrayBuffer>;

/**
* Creates an array from an array-like or iterable object.
Expand Down Expand Up @@ -585,6 +593,7 @@ interface Float64Array<TArrayBuffer extends ArrayBufferLike> {

interface Float64ArrayConstructor {
new (elements: Iterable<number>): Float64Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(elements: Iterable<number>): Float64Array<TArrayBuffer>;

/**
* Creates an array from an array-like or iterable object.
Expand Down
9 changes: 9 additions & 0 deletions tsc/internal/bundled/libs/lib.es2017.typedarrays.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,36 +15,45 @@ and limitations under the License.

interface Int8ArrayConstructor {
new (): Int8Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(): Int8Array<TArrayBuffer>;
}

interface Uint8ArrayConstructor {
new (): Uint8Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(): Uint8Array<TArrayBuffer>;
}

interface Uint8ClampedArrayConstructor {
new (): Uint8ClampedArray<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(): Uint8ClampedArray<TArrayBuffer>;
}

interface Int16ArrayConstructor {
new (): Int16Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(): Int16Array<TArrayBuffer>;
}

interface Uint16ArrayConstructor {
new (): Uint16Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(): Uint16Array<TArrayBuffer>;
}

interface Int32ArrayConstructor {
new (): Int32Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(): Int32Array<TArrayBuffer>;
}

interface Uint32ArrayConstructor {
new (): Uint32Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(): Uint32Array<TArrayBuffer>;
}

interface Float32ArrayConstructor {
new (): Float32Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(): Float32Array<TArrayBuffer>;
}

interface Float64ArrayConstructor {
new (): Float64Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(): Float64Array<TArrayBuffer>;
}
6 changes: 6 additions & 0 deletions tsc/internal/bundled/libs/lib.es2020.bigint.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -390,6 +390,9 @@ interface BigInt64ArrayConstructor {
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): BigInt64Array<TArrayBuffer>;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): BigInt64Array<ArrayBuffer>;
new (array: ArrayLike<bigint> | ArrayBuffer): BigInt64Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(length?: number): BigInt64Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<bigint> | Iterable<bigint>): BigInt64Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<bigint> | ArrayBuffer): BigInt64Array<TArrayBuffer>;

/** The size in bytes of each element in the array. */
readonly BYTES_PER_ELEMENT: number;
Expand Down Expand Up @@ -681,6 +684,9 @@ interface BigUint64ArrayConstructor {
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): BigUint64Array<TArrayBuffer>;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): BigUint64Array<ArrayBuffer>;
new (array: ArrayLike<bigint> | ArrayBuffer): BigUint64Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(length?: number): BigUint64Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<bigint> | Iterable<bigint>): BigUint64Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<bigint> | ArrayBuffer): BigUint64Array<TArrayBuffer>;

/** The size in bytes of each element in the array. */
readonly BYTES_PER_ELEMENT: number;
Expand Down
3 changes: 3 additions & 0 deletions tsc/internal/bundled/libs/lib.es2025.float16.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,9 @@ interface Float16ArrayConstructor {
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Float16Array<TArrayBuffer>;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float16Array<ArrayBuffer>;
new (array: ArrayLike<number> | ArrayBuffer): Float16Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(length?: number): Float16Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number> | Iterable<number>): Float16Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number> | ArrayBuffer): Float16Array<TArrayBuffer>;

/**
* The size in bytes of each element in the array.
Expand Down
27 changes: 27 additions & 0 deletions tsc/internal/bundled/libs/lib.es5.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2127,6 +2127,9 @@ interface Int8ArrayConstructor {
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Int8Array<TArrayBuffer>;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int8Array<ArrayBuffer>;
new (array: ArrayLike<number> | ArrayBuffer): Int8Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(length: number): Int8Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number>): Int8Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number> | ArrayBuffer): Int8Array<TArrayBuffer>;

/**
* The size in bytes of each element in the array.
Expand Down Expand Up @@ -2409,6 +2412,9 @@ interface Uint8ArrayConstructor {
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Uint8Array<TArrayBuffer>;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint8Array<ArrayBuffer>;
new (array: ArrayLike<number> | ArrayBuffer): Uint8Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(length: number): Uint8Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number>): Uint8Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number> | ArrayBuffer): Uint8Array<TArrayBuffer>;

/**
* The size in bytes of each element in the array.
Expand Down Expand Up @@ -2691,6 +2697,9 @@ interface Uint8ClampedArrayConstructor {
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Uint8ClampedArray<TArrayBuffer>;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint8ClampedArray<ArrayBuffer>;
new (array: ArrayLike<number> | ArrayBuffer): Uint8ClampedArray<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(length: number): Uint8ClampedArray<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number>): Uint8ClampedArray<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number> | ArrayBuffer): Uint8ClampedArray<TArrayBuffer>;

/**
* The size in bytes of each element in the array.
Expand Down Expand Up @@ -2972,6 +2981,9 @@ interface Int16ArrayConstructor {
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Int16Array<TArrayBuffer>;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int16Array<ArrayBuffer>;
new (array: ArrayLike<number> | ArrayBuffer): Int16Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(length: number): Int16Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number>): Int16Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number> | ArrayBuffer): Int16Array<TArrayBuffer>;

/**
* The size in bytes of each element in the array.
Expand Down Expand Up @@ -3254,6 +3266,9 @@ interface Uint16ArrayConstructor {
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Uint16Array<TArrayBuffer>;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint16Array<ArrayBuffer>;
new (array: ArrayLike<number> | ArrayBuffer): Uint16Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(length: number): Uint16Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number>): Uint16Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number> | ArrayBuffer): Uint16Array<TArrayBuffer>;

/**
* The size in bytes of each element in the array.
Expand Down Expand Up @@ -3535,6 +3550,9 @@ interface Int32ArrayConstructor {
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Int32Array<TArrayBuffer>;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Int32Array<ArrayBuffer>;
new (array: ArrayLike<number> | ArrayBuffer): Int32Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(length: number): Int32Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number>): Int32Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number> | ArrayBuffer): Int32Array<TArrayBuffer>;

/**
* The size in bytes of each element in the array.
Expand Down Expand Up @@ -3816,6 +3834,9 @@ interface Uint32ArrayConstructor {
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Uint32Array<TArrayBuffer>;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Uint32Array<ArrayBuffer>;
new (array: ArrayLike<number> | ArrayBuffer): Uint32Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(length: number): Uint32Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number>): Uint32Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number> | ArrayBuffer): Uint32Array<TArrayBuffer>;

/**
* The size in bytes of each element in the array.
Expand Down Expand Up @@ -4098,6 +4119,9 @@ interface Float32ArrayConstructor {
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Float32Array<TArrayBuffer>;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float32Array<ArrayBuffer>;
new (array: ArrayLike<number> | ArrayBuffer): Float32Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(length: number): Float32Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number>): Float32Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number> | ArrayBuffer): Float32Array<TArrayBuffer>;

/**
* The size in bytes of each element in the array.
Expand Down Expand Up @@ -4380,6 +4404,9 @@ interface Float64ArrayConstructor {
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(buffer: TArrayBuffer, byteOffset?: number, length?: number): Float64Array<TArrayBuffer>;
new (buffer: ArrayBuffer, byteOffset?: number, length?: number): Float64Array<ArrayBuffer>;
new (array: ArrayLike<number> | ArrayBuffer): Float64Array<ArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(length: number): Float64Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number>): Float64Array<TArrayBuffer>;
new <TArrayBuffer extends ArrayBufferLike = ArrayBuffer>(array: ArrayLike<number> | ArrayBuffer): Float64Array<TArrayBuffer>;

/**
* The size in bytes of each element in the array.
Expand Down
126 changes: 126 additions & 0 deletions tsc/testdata/tests/cases/compiler/typedArrayConstructorOverloads.ts
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,129 @@ export function makeTypedArray(buffer: ArrayBuffer, ctr: TypedArrayConstructor)
new ctr(buffer);
new ctr(buffer, 0, 0);
}

// https://github.com/microsoft/TypeScript/issues/61680

export function makeGenericTypedArrays(
numIterable: Iterable<number>,
numUnion: ArrayLike<number> | ArrayBuffer,
bigintIterable: Iterable<bigint>,
bigintUnion: ArrayLike<bigint> | ArrayBuffer,
) {
const source = new Uint8Array(10);
const copy1: Uint8Array<ArrayBuffer> = new Uint8Array(source);
const copy2: Uint8Array<ArrayBufferLike> = new Uint8Array<ArrayBufferLike>(source);
const copy3: Uint8Array<ArrayBuffer> = new Uint8Array<ArrayBuffer>(source);

new Int8Array<ArrayBufferLike>();
new Int8Array<ArrayBufferLike>(10);
new Int8Array<ArrayBufferLike>(source);
new Int8Array<ArrayBufferLike>(numIterable);
new Int8Array<ArrayBufferLike>(numUnion);

new Uint8Array<ArrayBufferLike>();
new Uint8Array<ArrayBufferLike>(10);
new Uint8Array<ArrayBufferLike>(source);
new Uint8Array<ArrayBufferLike>(numIterable);
new Uint8Array<ArrayBufferLike>(numUnion);

new Uint8ClampedArray<ArrayBufferLike>();
new Uint8ClampedArray<ArrayBufferLike>(10);
new Uint8ClampedArray<ArrayBufferLike>(source);
new Uint8ClampedArray<ArrayBufferLike>(numIterable);
new Uint8ClampedArray<ArrayBufferLike>(numUnion);

new Int16Array<ArrayBufferLike>();
new Int16Array<ArrayBufferLike>(10);
new Int16Array<ArrayBufferLike>(source);
new Int16Array<ArrayBufferLike>(numIterable);
new Int16Array<ArrayBufferLike>(numUnion);

new Uint16Array<ArrayBufferLike>();
new Uint16Array<ArrayBufferLike>(10);
new Uint16Array<ArrayBufferLike>(source);
new Uint16Array<ArrayBufferLike>(numIterable);
new Uint16Array<ArrayBufferLike>(numUnion);

new Int32Array<ArrayBufferLike>();
new Int32Array<ArrayBufferLike>(10);
new Int32Array<ArrayBufferLike>(source);
new Int32Array<ArrayBufferLike>(numIterable);
new Int32Array<ArrayBufferLike>(numUnion);

new Uint32Array<ArrayBufferLike>();
new Uint32Array<ArrayBufferLike>(10);
new Uint32Array<ArrayBufferLike>(source);
new Uint32Array<ArrayBufferLike>(numIterable);
new Uint32Array<ArrayBufferLike>(numUnion);

new Float16Array<ArrayBufferLike>();
new Float16Array<ArrayBufferLike>(10);
new Float16Array<ArrayBufferLike>(source);
new Float16Array<ArrayBufferLike>(numIterable);
new Float16Array<ArrayBufferLike>(numUnion);

new Float32Array<ArrayBufferLike>();
new Float32Array<ArrayBufferLike>(10);
new Float32Array<ArrayBufferLike>(source);
new Float32Array<ArrayBufferLike>(numIterable);
new Float32Array<ArrayBufferLike>(numUnion);

new Float64Array<ArrayBufferLike>();
new Float64Array<ArrayBufferLike>(10);
new Float64Array<ArrayBufferLike>(source);
new Float64Array<ArrayBufferLike>(numIterable);
new Float64Array<ArrayBufferLike>(numUnion);

const bigintSource = new BigInt64Array(10);
new BigInt64Array<ArrayBufferLike>();
new BigInt64Array<ArrayBufferLike>(10);
new BigInt64Array<ArrayBufferLike>(bigintSource);
new BigInt64Array<ArrayBufferLike>(bigintIterable);
new BigInt64Array<ArrayBufferLike>(bigintUnion);

new BigUint64Array<ArrayBufferLike>();
new BigUint64Array<ArrayBufferLike>(10);
new BigUint64Array<ArrayBufferLike>(bigintSource);
new BigUint64Array<ArrayBufferLike>(bigintIterable);
new BigUint64Array<ArrayBufferLike>(bigintUnion);
}

export class EncodedString extends Uint8Array<ArrayBufferLike> {
static encode(value: string): Uint8Array<ArrayBuffer> {
return new Uint8Array(value.length);
}

constructor(value: string);
constructor(value: ArrayBufferLike, byteOffset?: number, byteLength?: number);
constructor(value: string | ArrayBufferLike, byteOffset?: number, byteLength?: number) {
if (typeof value === "string") {
const encoded = EncodedString.encode(value);
super(encoded);
}
else {
super(value, byteOffset, byteLength);
}
}
}

export class GenericSubUint8Array<TArrayBuffer extends ArrayBufferLike = ArrayBufferLike> extends Uint8Array<TArrayBuffer> {
constructor(value?: number | ArrayLike<number> | Iterable<number> | TArrayBuffer) {
if (value === undefined) {
super();
}
else if (typeof value === "number") {
super(value);
}
else if ("maxByteLength" in value) {
super(value);
}
else if (Symbol.iterator in value) {
super(value);
}
else {
super(value);
}
}
}