В настоящее время я пишу код для запроса входа на сервер, получения данных сеанса и отправки в глобальный контекст.
Basi c Принцип: 1) Запросить и получить обещание 2) Подтвердить сам результат выборки и статус ответа. 3) Обеспечьте ценность внешнего компонента. И я работаю над 1) и 2).
Но я получил ошибку при вводе данных Type 'Promise<any>' is missing the following properties from type 'SessionInfo': userEmail, userName, sessionToken, duets(2739)
в коде, который возвращает данные результата внешним компонентам. Несмотря на строгую типизацию данных (возможно, я так думаю), я не уверен, почему линтер говорит, что обещание, а не обещание>. Я думаю, что TS не может подтвердить свой тип.
Когда я запускаю очень похожий код с Javascript (без ввода), он работает раньше. Я не уверен, почему это происходит, и не знаю, что случилось. Можете ли вы проверить мой код?
Коды ниже, там 4 файла - файл определения интерфейса, относящийся к пользователю, определение интерфейса для обработки ответа json, фактическое получение запроса, проверка и оценка ответа.
Когда я проверил линтинг на return res.data
на actionHandler.ts
, линтеру удалось предсказать его тип. res.data
равно ResponseSet<SessionInfo>.data?: userTypes.SessionInfo
, как сказал линтер.
In userTypes.ts
export interface SessionInfo {
userEmail: string,
userName: string,
sessionToken: string,
due: number,
}
In commonTypes.ts
export interface ResponseSet<T> { // Response wrapper when it returns with code 200
statusCode: ResponseStatusCode, // ResponseStatusCode is custom typed status code not for request it self.
data?: T,
description?: string,
};
In userReq.ts
const login = async (email: string, password: string): Promise<commonTypes.ResponseSet<userTypes.SessionInfo>> => {
try {
const request: Request = new Request(
composeUri(`user/login`, { email, password }),
{
method: 'GET',
headers: { 'Content-type': 'application/json' },
mode: 'cors',
}
);
const response: Response = await fetch(request);
if (response.status != 200) throw response.status;
return await response.json();
} catch {
return {
statusCode: 1,
};
}
}
In actionHandler.ts
export const doLogin = (email: string, password: string): userTypes.SessionInfo => {
const result: userTypes.SessionInfo = userReq.login(email, password)
.then(res => {
if (res.statusCode != 0) throw new Error(res.description || 'UnknownError');
return res.data;
})
.catch(err => {
return null;
});
return result;
}
Я получил ошибку const result:...
. Получил Type 'Promise<any>' is missing the following properties from type 'SessionInfo': userEmail, userName, sessionToken, due ts(2739)
. Я не уверен, почему он распознается как "Promise", несмотря на строгое определение типа моего кода.