Проверка типа ответа API в машинописи - PullRequest
2 голосов
/ 18 марта 2020

Мне любопытно, что происходит, когда вы ожидаете определенный тип в качестве ответа от fetch / Ax ios / et c, а его ответ другого типа. Могу ли я обнаружить это несоответствие?

interface HttpResponse<T> extends Response {
  parsedBody?: T;
}
export async function http<T>( request: RequestInfo ): Promise<HttpResponse<T>> {
  const response: HttpResponse<T> = await fetch( request );
  response.parsedBody = await response.json();
  return response;
}

// example consuming code
const response = await http<number>(
  "https://thisURLdoesNotReturnANumber"
);

Будет ли код выдавать ошибку? Это пройдет бесшумно? Как я могу обнаружить несоответствие?

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Ваш машинописный код код переносится в javascript до того, как браузер выполнит его. Это будет выглядеть примерно так:

export async function http( request ) {
  const response = await fetch( request );
  response.parsedBody = await response.json();
  return response;
}
const response = await http("https://thisURLdoesNotReturnANumber");

Нет типов, как вы можете видеть. Браузеры ничего не знают о типах, определенных в машинописи.

Позже вы можете получить или не получить ошибку времени выполнения. Чтобы бросить как можно раньше, вам нужно самостоятельно выполнить проверку во время выполнения внутри вашей функции http<T>().
Или вы можете использовать стороннюю библиотеку для выполнения этой работы. Их там много.

0 голосов
/ 18 марта 2020

Ваш код Typescript будет проанализирован как Javascript, поэтому во время выполнения, когда другой тип поступает из вашего API, проверка типов больше не доступна.

Вы не получите никаких ошибок.

TypeScript - очень хорошая помощь при разработке, но, к сожалению, он не потерпит неудачу при проверке типов во время выполнения.

...