首页 > 解决方案 > 如何将 fetch API 响应转换为 TypeScript 中的特定类型?

问题描述

我正在尝试将 API 调用的响应转换为我的代码(TypeScript)中的特定类型。但是,我没有成功地将响应转换为我的类型,而只有 Object.

我尝试了几种方法,特别是这里描述的:https ://www.carlrippon.com/fetch-with-async-await-and-typescript/

类型:

export interface MyType{
  id: number;
  name: string;
  date: Date;
}

获取代码:

export default class api {
  static async get<T>(url: string): Promise<T> {
    return new Promise(resolve => {
      fetch(url)
        .then(response => response.json())
        .then(body => {
          resolve(body);
        });
    });
  }
}

呼叫者:

const result = await api.get<MyType[]>(
      "my-url-here"
    );

我希望result是类型MyType[],但它是Object[]。(所有字段)

此外,我尝试将name字段的类型更改为number(同时始终保持来自 API 的相同响应,即名称是一些不可转换为数字的字符串)并预期会出现一些类型转换错误,但没有。result仍然使用相同的内容和相同的类型创建: result: Array(3) [Object, Object, Object]

好像根本没有选角。

你能告诉我我错在哪里,并告诉我该怎么做吗?

非常感谢。

标签: jsontypescriptfetch-api

解决方案


预计会出现一些类型转换错误,但没有。

TypeScript 不强制转换。它断言s。这是一种让您有针对性地告诉编译器在运行时会发生什么的方法。如果它在运行时不是那样,它在你身上。

使固定

选项,或者:

  • 更改后端响应,使其与您断言的内容相匹配。
  • 更改断言以匹配后端返回的内容。

更多的


推荐阅读