我该如何告诉 TypeScript 给定的参数包含 Typed Arrays 中的一个?
选择最适合您需求的 Typed Array 的类型并不罕见(例如 Flatbush 库就是这样做的)。
我想检查传递给构造函数的内容是否确实标识了 Typed Arrays 中的一个。但在我的 lib.es6.d.ts 中,没有任何 Typed Arrays 继承自一个公共接口。
相关问题: "ArrayLike" 接口用于什么?
我该如何告诉 TypeScript 给定的参数包含 Typed Arrays 中的一个?
选择最适合您需求的 Typed Array 的类型并不罕见(例如 Flatbush 库就是这样做的)。
我想检查传递给构造函数的内容是否确实标识了 Typed Arrays 中的一个。但在我的 lib.es6.d.ts 中,没有任何 Typed Arrays 继承自一个公共接口。
相关问题: "ArrayLike" 接口用于什么?
没有内置的别名,但是你可以根据 lib.es2017.typedarrays.d.ts
中的类型自己创建一个。
type TypedArray =
| Int8Array
| Uint8Array
| Uint8ClampedArray
| Int16Array
| Uint16Array
| Int32Array
| Uint32Array
| Float32Array
| Float64Array;
回答你的第二个问题:并不是在浏览器中使用的每个集合都使用正确的数组实现。一些数据结构,如NodeListOf
或AggregateError
,有不同的方法,但它们有一个相似之处——它们可以通过数字进行索引。您可以将ArrayLike
视为用于描述这种对象的抽象类型。
BigInt64Array
和BigUint64Array
,它们也是ES2020的类型化数组。 - undefinedTypescript没有TypedArray
接口,但可以像这里的建议一样,使用ArrayBufferView,它是所有类型化数组的超类型。
length
属性。由于这种等价性的缺乏,我们无法执行以下操作:
let a: ArrayBufferView, acc = 0; for(let i = 0; i < a.length; i++) acc += a[i];
因为TS会抱怨ArrayBufferView
没有length
属性。 - Robert MonferaArrayBufferView
,根据@tobenna的答案,唯一的选择是创建自己的TypedArray
接口。type TypedArray =
| Int8Array
| Uint8Array
| Uint8ClampedArray
| Int16Array
| Uint16Array
| Int32Array
| Uint32Array
| Float32Array
| Float64Array;
ArrayBufferView
方法不同,这不包括DataView
对象。ArrayLike
接口用于可以通过数字索引并具有长度的所有内容。这包括像DOM NodeList
这样的东西,它不包含Array
原型上的大多数方法。