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

时间:2019-05-02 21:38:59

标签: json typescript fetch-api

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

我尝试了几种方法,特别是此处描述的方法: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的相同响应,即name是一些不能转换为number的字符串),并且期望使用某种类型投放错误,但没有任何错误。 result仍使用相同的内容和相同的类型创建: result: Array(3) [Object, Object, Object]

似乎根本没有演员表。

您能告诉我我在哪里错了,然后告诉我该怎么做吗?

非常感谢您。

1 个答案:

答案 0 :(得分:0)

  

预期会发生类型转换错误,但没有。

TypeScript不广播。它断言。这是您认真告诉编译器在运行时会发生什么的一种方式。如果事实并非如此,那它就在您身上。

修复

选项,或者:

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

更多