【问题标题】:Typescript typecasting a response to a classTypescript 对类的响应类型转换
【发布时间】:2017-12-07 23:50:00
【问题描述】:

我有一个模型类 p

class P {
    constructor(public ids: number[]) {
        console.log(ids);
    }
}

在调用服务 api 时,我得到如下响应:

var response: any = { ids: "this is string" }

现在,当我们使用“响应”创建模型 P 的实例时

let p1 = new P(response.ids);

这应该会产生错误:ids type mismatch

但没有错误。

现在的问题是如何拒绝响应,如果它与给定的模型类型不匹配?

【问题讨论】:

  • 如果你想保证类型安全,你可以根据他们的 API 规范生成响应模型(例如,有大量的 swagger 生成脚本/工具),你可以确定在编码时你没有得到错误的类型

标签: javascript angular typescript


【解决方案1】:

TypeScript 编译为JavaScript。在运行时,因此当您调用服务 API 时,类型或类型提示是未知的。这些都只在编译步骤中相关。

如果您正在检查对象,您应该使用typeof 或instanceof 手动检查API 是否以正确的类型响应。如果ids 是一个数字数组,您可以这样做:

isArrayOfNumbers(array: any): boolean {
  return Array.isArray(array) && array.every(value => typeof value === 'number');
}

【讨论】:

  • 我正在做一个 angular4 项目,我的服务返回如下。 return >this.http.get(${this.endPoint.mock).‌​map(_card => { return new Card(_card.purchaseId, _card.productName); });所以,这样可以吗,或者我应该做明确的类型检查。
【解决方案2】:

Typescript 被编译为 javascript,因此运行时没有类型。如果要显示该消息,则必须明确检查。类似Test for array of string type in TypeScript

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-28
    • 2017-09-13
    • 2017-12-28
    • 2021-02-21
    • 2018-07-14
    • 2020-06-18
    • 2019-09-21
    • 2012-10-23
    相关资源
    最近更新 更多