Как принять только ArrayBuffer как параметр - PullRequest
0 голосов
/ 07 августа 2020

У меня есть класс, который принимает параметр буфера массива в конструкторе следующим образом:

class Test {
    public constructor(buffer: ArrayBuffer) {
        ...
    }
}

Проблема в том, что тип ArrayBuffer - довольно маленький интерфейс, который также случайно сопоставляет типизированные массивы (которые не буферы массива). Таким образом, мой класс также может быть построен с типизированным массивом в качестве параметра. Таким образом, оба вызова действительны для компилятора:

new Test(new Float32Array([ 1, 2, 3, 4 ]).buffer);  // <-- Correct usage
new Test(new Float32Array([ 1, 2, 3, 4 ]));         // <-- Wrong usage

Чтобы предотвратить неправильное использование моего API, я хочу, чтобы компилятор отклонял передачу типизированных массивов конструктору. Кто-нибудь знает маленький трюк, как этого добиться?

1 Ответ

0 голосов
/ 07 августа 2020

Nevermind, нашел решение:

type StrictArrayBuffer = ArrayBuffer & { buffer?: undefined };

Он соответствует реальному ArrayBuffer, потому что он не имеет свойства buffer и не соответствует типизированному массиву, потому что этот тип имеет buffer свойство, не соответствующее типу undefined.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...