如何将 fetch API 响应转换为 TypeScript 中的特定类型?

How to cast fetch API response to a specific type in 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"
    );

我希望 resultMyType[] 类型,但它是 Object[]。 (包含所有字段)

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

好像完全没有选角

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

非常感谢。

expected some type casting error, but there was none.

TypeScript 不会 cast。它 断言 s。这是一种 有力地 告诉编译器运行时会发生什么的方法。如果在运行时结果不是这样,那就由你了。

修复

选项,或者:

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

更多