#javascript #typescript
#javascript #typescript
Вопрос:
Все это с использованием TypeScript .
У меня есть функция с именем ‘extent’ из внешней библиотеки, которая возвращает либо [число, число], либо [неопределенный, неопределенный], поэтому я не могу изменить саму эту функцию.
У меня есть функция с именем ‘getMaxRange’, и она принимает массив чисел и возвращает массив длиной 2, каждый из которых содержит число, как таковое: [число, число]
Если я наберу что-то вроде
getMaxRange = (points: number[]) : [number, number] => {
const range = extent(points));
if (range == [undefined, undefined]) {
return [0,1];
}
else{
return range;
}
}
это выдает ошибку, которая Type [undefined, undefined] | [number, number] is not assignable to type [number, number]
.
Каков наилучший подход, чтобы сделать так, чтобы я не получал эту ошибку? Как я могу заставить его узнать, что диапазон больше не может быть [неопределенным, неопределенным]?
Ответ №1:
if (range == [undefined, undefined])
всегда false
. Использование ==
или ===
для сравнения массивов проверяет, являются ли они одним и тем же массивом, а не имеют ли они одинаковое содержимое.
Вам нужно будет проверить элементы массива:
if (range[0] === undefined amp;amp; range[1] === undefined)
На самом деле, учитывая типы, достаточно просто проверить один элемент:
if (range[0] === undefined)
С точки зрения времени выполнения это также сработало бы:
if (range.includes(undefined))
но с этим TypeScript не распознает защиту, и вам придется явно пометить его утверждением, поэтому, вероятно, лучше использовать первую версию.
Комментарии:
1. ах да, это сделало бы это, полностью прошло через мою голову
2. @AndrewZaw — 🙂 Рад, что помогло!
3. @AndrewZaw — я только что понял, что с учетом типов вам действительно нужно проверить только один элемент. Обновлен ответ. 🙂
Ответ №2:
Вы можете проверять элементы массива
getMaxRange = (points: number[]) : [number, number] => {
const range = extent(points));
if (range[0] === undefined || range[1] === undefined) {
return [0,1];
}
else{
return range;
}
}