SafeArray from Arraylike

This commit is contained in:
lomonoshka
2023-08-06 13:18:14 +03:00
parent 9fcccdcfd6
commit 8bac672bfd
2 changed files with 12 additions and 9 deletions

View File

@@ -1,14 +1,18 @@
export class SafeArray<T> extends Array<T> {
public static override from<T>(array: T[]): SafeArray<T> {
public static override from<T>(array: ArrayLike<T>): SafeArray<T> {
return new SafeArray(array);
}
constructor(array: T[]) {
constructor(array: ArrayLike<T>) {
super(array.length);
array.forEach((element, index) => {
this[index] = element;
})
for (const index in array) {
const value = array[index]
if (value === undefined) {
throw new Error("Array passed to constructor has undefined values")
}
this[index] = value
}
}
public toArray(): T[] {
@@ -26,7 +30,7 @@ export class SafeArray<T> extends Array<T> {
public get<T>(this: SafeArray<T>, index: number): T {
const value = this.at(index);
if (value === undefined) {
throw new Error(`Element at index ${index} is undefined. Array: ${this}`)
throw new Error(`Element at index ${index} is undefined.`)
}
return value
}