TL; DR;
Почему я получаю эту ошибку ?
Я перехожу с ES6 на TypeScript и получаю ошибку Type 'number' is not assignable to type 'never'.(2322)
попытка переписать функцию для создания ловушки.
Первоначальная проблема проста: обернуть метод API, чтобы мне не нужно было передавать маркер доступа при каждом вызове.
Все методы, которые требуется, чтобы токен авторизации имел тот же родительский интерфейс:
export interface AuthParams {
token: string;
}
Тривиальный пример метода API:
interface GetProfileParams extends AuthParams {
id: number;
}
interface Profile {
name: string;
}
async function getProfile(params: GetProfileParams): Promise<Profile> {
return Promise.resolve({ name: 'John Doe' });
}
Я реализовал функцию, которая может создавать ловушку из любого Метод API, который требует токен авторизации. Хук использует токен из контекста React и связывает его как значение метода по умолчанию для параметра 'token':
import { useCallback } from 'react';
interface PrivateMethod<TParams extends AuthParams, TResult> {
(params: TParams): TResult;
}
interface SecuredMethod<TParams extends AuthParams, TResult> {
(params: Exclude<TParams, AuthParams>): TResult;
}
function createAuthorizedMethodHook<
TParams extends AuthParams,
TResult
>(
method: PrivateMethod<TParams, TResult>,
): () => SecuredMethod<TParams, TResult> {
return () => {
return useCallback(
params => method({ token: 'TOKEN FROM CONTEXT', ...params }),
[],
);
};
}
Наконец, я пытаюсь использовать оболочку функции и получаю ошибку :
const useGetProfile = createAuthorizedMethodHook(getProfile);
const securedGetProfile = useGetProfile();
securedGetProfile({ id: 1 });
// ^^
// Type 'number' is not assignable to type 'never'.(2322)
Почему я получаю эту ошибку? Это ошибка? Должен ли я создать проблему на репозитории TypeScript ?
Протестировано на версии Typescript 3.7.4
и 3.8.0-dev.20200115
.