Здравствуйте! Столкнулся с проблемой типизации компоненты
Типизация пропсов компоненты:
// Основная проблема в этом типе
type FunctionParams<U> = U extends undefined
? {
page: number;
limit: number;
}
: {
page: number;
limit: number;
} & U;
interface IProps<T, U> {
queries?: U;
getList: (
props: FunctionParams<U>
) => AxiosPromise<IAxiosPaginatedResponse<T>>;
...
}
Пример вызова:
const filters = {
search: '';
city: 1;
};
<Pagination
getList={getList}
queries={filters}
...
/>
Функция getList:
export const getList = (props: {
page: number;
limit: number;
search: string;
city: number;
}): AxiosPromise<IAxiosPaginatedResponse<IListItem>> => {
return ...
};
Задача состоит в том, чтобы совпадало количество (и типы) пропсов передаваемых в функцию, т.е. в рамках примера, чтобы в queries обязательно передавалось search и city, иначе выкидывать ошибку
Однако при передаче лишнего свойства в queries или если закоментить передачу queries, ошибка не появляется, вместо этого (в ide) тип пропса getList преобразуется в вид:
Если не передавать queries
(props: ({page: number, limit: number} & {page: number, limit: number, search: string, city: number}) => ...
Если передать в queries лишнее свойство, например, newProp: string
(props: ({page: number, limit: number} & {newProp: string, search: string, city: number}) => ...
Почему в первой ошибке не срабатывает условный тип (если U автоматически формирует тип из параметров функции, то как этого избежать, другими словами, как правильно написать проверку), а во второй не ругается на лишнее свойство?
Заранее, спасибо, за любую помощь!