TypeScript: интерфейс «TypedArray» для типизированных массивов - PullRequest
0 голосов
/ 26 декабря 2018

Как мне сказать TypeScript, что данный параметр содержит один из Типизированных массивов ?

Нередко есть возможность выбрать тип типизированного массива, который наилучшим образом соответствует вашим потребностям(например, библиотека Flatbush делает это).

Я хочу проверить, действительно ли то, что передается в конструктор, идентифицирует один из типизированных массивов.Но в моем lib.es6.d.ts ни один из типизированных массивов не наследуется от общего интерфейса.

связанный вопрос: Для чего используется интерфейс "ArrayLike"?

Ответы [ 3 ]

0 голосов
/ 26 декабря 2018

Если вы недовольны использованием ArrayBufferView, согласно ответу @ tobenna , единственным другим вариантом будет создание собственного интерфейса TypedArray.

type TypedArray =
  | Int8Array
  | Uint8Array
  | Uint8ClampedArray
  | Int16Array
  | Uint16Array
  | Int32Array
  | Uint32Array
  | Float32Array
  | Float64Array;

Примечание: в отличие от метода ArrayBufferView это исключает объекты DataView.

Наконец, интерфейс ArrayLike используется для всего, что может быть проиндексировано числом и имеет длину.Это включает в себя такие вещи, как DOM NodeList, который не содержит большинство методов прототипа Array.

0 голосов
/ 26 декабря 2018

Встроенного псевдонима нет, но вы можете создать его самостоятельно на основе типов из lib.es2017.typedarrays.d.ts.

type TypedArray =
  | Int8Array
  | Uint8Array
  | Uint8ClampedArray
  | Int16Array
  | Uint16Array
  | Int32Array
  | Uint32Array
  | Float32Array
  | Float64Array;

Чтобы ответить на второй вопрос: не все коллекции, используемые в браузере, реализованыс правильными массивами.Некоторые структуры данных, такие как NodeListOf или AggregateError, имеют разные методы, но имеют одно сходство - они могут быть проиндексированы числами.Вы можете думать о ArrayLike как об абстрактном типе, используемом для описания такого объекта.

0 голосов
/ 26 декабря 2018

машинопись не имеет интерфейса TypedArray, но, как и предложение здесь , вы можете использовать ArrayBufferView , который является супертипом всех типизированных массивов.

...