Angular `HttpClient` `.get()` 泛型可以有非简单属性类型吗? (例如“字符串”或“数字”除外)

2024-04-04

我花了一天时间研究这个主题,但没有找到任何线索。我所找到的只是omission,因为我读过的任何内容都表明你can使用非简单类型(我的意思是string and number)用于调用 Angular 4.4 时的通用接口(“shape”)HttpClient.<T>get().

下面的示例代码不是无法描述问题,而是我想要做的:

// Injected in my real code ... but these are the libs being used.
import { HttpClientModule } from '@angular/common/http';
import { Observable } from "rxjs";
import 'rxjs/Rx';

interface IMyDataItem {
    // In this example, using @Types/Decimal.js
    // It appears the "problem" exists for any types beside the simples (number/string etc)
    results: decimal.Decimal[];
}

class Service {
   doSomethingCool() {
       this._http
          .get<IMyDataItem>("url://somewhere")
          .subscribe(
             data => {
                // Call a method on the Decimal typed property
                data.results[0].pow(3, 3);
             }
          );
   }
}

从语法上来说它可以编译。 TypeScript 正确解决了通用魔法 - 并认识到这一点data.results是一个类型的数组Decimal.

然而在运行时(在 Chrome 中,转译为 Javascript 后)调用pow()失败,指出该方法不存在(事实上,调试它表明它是一个普通的旧 Javascript 对象)。

我对 TypeScript 和 Angular 4 非常陌生——但这对我来说是合乎逻辑的。我只问了通用的get()调用将请求作为接口进行处理。它必须确定如何构造一个实现该接口的对象。我没有在任何地方构建过实现该接口的实体对象,也没有在任何地方构建过Decimal.

(更新:这篇文章进一步让我相信我的直觉......https://jameshenry.blog/typescript-classes-vs-interfaces/ https://jameshenry.blog/typescript-classes-vs-interfaces/)

The 官方文档 https://angular.io/guide/http#typechecking-the-response(事实上​​,我观察到的每个非官方来源)都证明它可以与(用我的话来说)“简单”类型(特别是number and string) - 我的直觉说“有道理”,因为JSON对象可以有简单的字符串和简单的数字。

我错过了显而易见的事情吗?或者直接映射到更复杂的类类型是不可能的吗?

如果不可能——您通常如何处理?我一直在寻找“最佳实践”模式,但结果却不尽如人意。

再说一遍,我的直觉(而且只是my gut说我应该在类中拥有一个私有方法来处理 API 请求 - 并返回一个Observable(调用者将订阅的)这给出了一个复杂的对象类型(例如一个数组User类,其中具有与用户相关的方法):

class Service {
   // Return a complex object type Observable for consumption elsewhere
   doSomethingCool(): Observable<IMyDataItem> {
       return this._http
          .get<IMyDataItem>("url://somewhere");
   }
}

那有意义吗? TIA。


http.get()Angular 返回 aResponse。首先尝试将其映射为 JSON:

import "rxjs/add/operator/map";

....
class Service {
    doSomethingCool(): Observable<IMyDataItem> {
        return this._http
            .get("url://somewhere");
            .map((response:Response) => response.json() as IMyDataItem);
    }
}

附注你需要导入rxjs to use map()

EDIT

经过评论的讨论,然后是我对这个“Can AngularHttpClient .get()泛型具有非简单属性类型”问题是:

不,因为默认情况下get()方法默认返回 JSON。并基于这个网站 https://www.w3schools.com/js/js_json_datatypes.asp, JSON 数据类型只能是字符串、数字、对象(JSON 对象)、数组、布尔值或 null。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular `HttpClient` `.get()` 泛型可以有非简单属性类型吗? (例如“字符串”或“数字”除外) 的相关文章

随机推荐

  • 如何监控 TensorFlow 估计器训练中的验证损失?

    我想问一个关于如何在 TensorFlow 估计器的训练过程中监控验证损失的问题 我查过类似的问题 估计器训练期间的验证 https stackoverflow com questions 45417502 validation durin
  • 如何在 MATLAB 中执行此累积和?

    我想计算第 2 列中的值的累积和dat txt下面是第 1 列中的每个字符串 所需的输出显示为dat2 txt dat txt dat2 txt 1 20 1 20 20 20 0 1 22 1 22 42 20 22 1 20 1 20
  • 解析树和抽象语法树(AST)有什么区别?

    它们是由编译过程的不同阶段生成的吗 或者它们只是同一事物的不同名称 这是基于表达评估器 http www antlr3 org works help tutorial calculator html泰伦斯 帕尔的语法 本例的语法 gramm
  • 修复了左侧的侧边栏菜单和顶部的固定标题

    所以我想做的是一个固定的侧边栏 顶部有一个固定的菜单 中间的内容可以滚动 body html height 100 margin 0 aside background 90EE90 height 100 left 0 position fi
  • validateRequest="false" 不起作用,即使 requestValidationMode="2.0"

    我有一个在 Visual Studio dev fabric azure 项目 中运行的 ASP NET 网站 并且正在使用 ACS 和 WIF 我的身份验证过程无法正常工作 因为登录后我收到以下信息 A potentially dange
  • Node.js 中的客户端-服务器通信

    我最近开始使用 Node js 来制作一个在线游戏 用于教育 通过阅读各种教程 我想出了如下所示的简单代码 使用我拥有的代码 我能够进行客户端 服务器通信 这基本上是我制作游戏所需的全部内容 只有一个问题 只有客户端可以发起会话 而服务器只
  • 在 gridview 中显示数据库中的数据

    有谁知道如何将数据库条目放入android中的gridview中 或者是否有一个教程解释了如何做到这一点 请通过提供完整的示例来帮助我 您将需要使用游标适配器 http developer android com reference and
  • 当片段更改时如何更新视图?

    我有一个活动 其中有 2 个 sherlockfragment 前两个页面显示带有自定义列表视图的片段 这些视图是使用 AsyncTask 从服务器的 xml 构建的 但是 当应用程序运行时 仅显示一个列表视图 另一页只是空白 public
  • new URL() - WHATWG URL API

    我正在摆弄节点 并试图获取 URL 类的实例 因为这些方便的属性 喜欢 const URL require url http createServer request response gt let uri new URL request
  • 如何生成具有给定限制和平均值的随机数? [复制]

    这个问题在这里已经有答案了 我想生成一系列 30 个随机数 其中上限为 40 下限为 12 平均值为 23 总结 n 30 最小值 12 最大值 40 平均值 23 提前致谢 如果您想要连续分布 您可以获得最小值和最大值之间的任何浮点值 一
  • 如何在 UML 中指定“一次一个”?

    我正在制作一个类图Classroom and a Course class 我怎样才能表明Classroom只能有一个Course一次在其中吗 我知道我可以使用多重性来指定教室可以只开设一门课程 但这并不能完全指定在不同时间可以有除该一门课
  • 列表中情侣的乘积之和

    我想找出列表中情侣的乘积之和 例如给出一个列表 1 2 3 4 我想要得到的是答案 1 2 1 3 1 4 2 3 2 4 3 4 我使用暴力来完成此操作 它会给我带来非常大的列表的超时错误 我想要一种有效的方法来做到这一点 请告诉我 我该
  • setFont(Times-Roman) 不能缺少 T1 文件吗?

    我有错误 Can t find pfb for face Times Roman Error reportlab graphics renderPM RenderPMError Can t setFont Times Roman missi
  • 使用 StreamReader 异步解码 utf-8

    我正在习惯 asyncio 并发现任务处理非常好 但将异步库与传统 io 库混合起来可能很困难 我当前面临的问题是如何正确解码异步 StreamReader 最简单的解决方案是read 字节字符串块 然后解码每个块 请参阅下面的代码 在我的
  • React Native 嵌套 ScrollView 锁定

    我正在尝试将 ScrollViews 嵌套在 React Native 中 带有嵌套垂直滚动条的水平滚动条 这是一个例子 var Test React createClass render function return
  • 使用 urllib2 或任何其他 http 库读取超时

    我有用于读取这样的网址的代码 from urllib2 import Request urlopen req Request url for key val in headers items req add header key val r
  • 如何测试 Stripe 中的订阅续订流程?

    我想测试我的应用程序在订阅付款已完成 或失败 时对来自 stripe 的 webhook 事件的处理 这是我到目前为止所尝试过的 设置新订阅 将用户的信用卡更新为可以添加到帐户但无法实际扣款的信用卡 将试用结束日期更改为一秒内 等待几秒钟
  • 如何使用 Arc 和 Weak 创建循环引用?

    我有两个结构 struct A map HashMap
  • 为什么drawRect:在不调用[superdrawrect:rect]的情况下工作?

    我在我的视图之一中重写了drawRect 即使不调用 superdrawrect rect 它也能工作 这是如何运作的 void drawRect CGRect rect CGContextRef context UIGraphicsGet
  • Angular `HttpClient` `.get()` 泛型可以有非简单属性类型吗? (例如“字符串”或“数字”除外)

    我花了一天时间研究这个主题 但没有找到任何线索 我所找到的只是omission 因为我读过的任何内容都表明你can使用非简单类型 我的意思是string and number 用于调用 Angular 4 4 时的通用接口 shape Ht