#javascript #typescript
Вопрос:
У меня есть многоразовый метод getFilters
, который может возвращать несколько различных типов
getFilters(): IListFilteringType {...}
type IListFilteringTypeMultiSelect = (string | number)[];
type IListFilteringType = boolean | string | number | IListFilteringTypeMultiSelect;
Когда я звоню getFilters
, как я могу указать, что я знаю, что возвращаемое значение имеет тип IListFilteringTypeMultiSelect
, а не одно из других возможных значений IListFilteringType
?
Спасибо
Комментарии:
1. Откуда ты знаешь? Здесь может быть более элегантное решение.
2. Влияет ли тип параметров, передаваемых функции, на тип возвращаемого значения детерминированным образом? В этом случае попробуйте перегрузить подписи . Если на основе аргументов невозможно определить, какой из типов будет возвращен, используйте тип объединения , как вы уже сделали, и приведите результат, используя
as
, как описано в ответе Вухайка.3. Несколько типов возвращаемых значений-это признак того, что ваша функция делает слишком много. Разделите его на более мелкие функции, которые возвращают только один тип, и их будет легче читать и понимать.
Ответ №1:
Если вы уверены в типе возвращаемой функции для конкретного выполнения, вы можете привести возвращаемое значение с помощью as
.
const variable = functionResponse as IListFilteringTypeMultiSelect;
Комментарии:
1. Есть ли способ превратить это в какое-то условное условие? Например, может быть, если функция возвращает логическое значение, я хочу сделать X, но если функция возвращает строку, я хочу сделать Y? Я предполагаю что-то вроде if (переменная как логическая) { /*X*/ } иначе if (переменная как строка) (v{ /*Y*/}?
2. Вы можете использовать условные вызовы, использовать
as
внутри каждогоif
и выполнять соответствующие входы друг в друга внутри одного и того жеif
, чтобы избежать ошибок типа, но это создает большую сложность, так как это необходимо делать каждый раз, когда вы вызываете функцию. Подумайте о том, чтобы разделить работу.