为什么在不进行强制转换的情况下将任何内容转换为更具体的类型

汤姆·德赛恩

在尝试找出将http调用的json响应转换为TypeScript类/接口的最佳方法时,我在堆栈溢出时发现了此代码段

getTeachers(): Observable<Teacher> {
  return this.http.get('someUrl')
    .map((res: Response) => res.json())
}

看起来不错,但是我不明白它是如何工作的。

  • 为什么没有投语法的通用转换any类型res.json()的更具体的类型Teacher
  • 为什么建议Teacher将其作为TypeScriptinterface而不是TypeScript class
汤姆·德赛恩

我将根据@Sasxa的回答和通过其他渠道收到的输入回答我自己的问题。我的重点是向有使用强类型语言的背景的人们解释它。

任何

首先,您可能会假设any所有类型都是超级类型。就是这种情况!Any可用于引用任何实例。

打字稿规范还定义了任何可分配所有类型。根据定义可能是javascript interop。从规格:

“ Any类型是所有类型的超类型,并且可以分配给所有类型,也可以从所有类型中分配。”

任何作为通用参数

静态类型语言也具有“协方差”和“逆方差”的概念。将通用参数用作输出类型时,可以将其替换为基本类型(协方差)。例如:“字符串的迭代器”可以分配给“对象的迭代器”。当泛型参数用作输入类型时,可以用它代替派生类型(相反)。

因为any可以从所有类型分配给所有类型,所以对于参数化类型也是如此。Observable<Teacher>因此可以从和转换为Observable<any>

类型断言

TypeScript类型断言可用于更改实例的感知类型。由于TypeScript是一种结构化类型的语言,因此类型描述了实例的结构,但是实例本身并不知道该类型(在断言中使用)。在声明类型时,我们不应使用除实例成员以外的其他成员的类型。在的情况下,res.json()例如,我们不期望的类型有方法的成员,因为它是通过一个HTTP GET调用检索到的数据。类型是类还是接口都没有关系。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不进行类型转换的情况下将flatten实现为数组的扩展?

来自分类Dev

如何在不进行强制转换的情况下取消引用void变量

来自分类Dev

将null强制转换为任何类型

来自分类Dev

为什么我们可以在不强制转换的情况下将32位的立即数整数赋给short类型的变量?

来自分类Dev

如何在有条件的情况下将指针强制转换为基本类型的指针

来自分类Dev

使用按位将 char 值存储在 int 上,并在不进行强制转换的情况下将其取回时保持值符号值正确

来自分类Dev

为什么在选择器不起作用的情况下强制类型转换起作用

来自分类Dev

为什么在选择器不起作用的情况下强制类型转换起作用

来自分类Dev

Pig:如何将所有元组发送到UDF而不进行分组处理?或者如何在不分组的情况下将元组转换为Bag?

来自分类Dev

是否可以像在Javascript对象中一样将整数值存储在localStorage中并在不进行类型转换的情况下提取它?

来自分类Dev

为什么在不使用static_cast的情况下对const void *进行类型转换是合法的,而不是C ++中的C ++

来自分类Dev

为什么在某些情况下可以将布尔值转换为字符串,而在其他情况下则不能?

来自分类Dev

如何在不进行NSData转换的情况下将url图像传递给ios中的按钮

来自分类Dev

在不进行编码的情况下将字符串与字节数组之间来回转换

来自分类Dev

将正则表达式转换为更具体

来自分类Dev

在不丢失任何格式的情况下将Docx文件转换为PDF

来自分类Dev

如何在没有任何模块的情况下将日历日期转换为顺序日期

来自分类Dev

为什么在没有任何未经检查的类型警告的情况下进行编译?

来自分类Dev

为什么在使用通用约束时无法将具体类型转换为接口

来自分类Dev

TypeScript:强制将变量识别为一种类型而不进行强制转换

来自分类Dev

为什么将通用返回类型强制转换为另一个通用类型?

来自分类Dev

在设计时不知道类型的情况下,如何将int转换为Enum?

来自分类Dev

在没有样板的情况下将类型从“ T a”转换为“ T b”

来自分类Dev

在基本字段类型相同的情况下将TypeA转换为TypeB

来自分类Dev

在不更改对象类型的情况下将早期绑定转换为后期绑定

来自分类Dev

在不知道列类型的情况下将NULL值转换为“ UNKNOWN”

来自分类Dev

如何在不删除字符的情况下将SQLCHAR [200]类型转换为std :: string?

来自分类Dev

在设计时不知道类型的情况下,如何将int转换为Enum?

来自分类Dev

为什么在某些情况下 Python 中的类型转换/乘法会失败?

Related 相关文章

  1. 1

    如何在不进行类型转换的情况下将flatten实现为数组的扩展?

  2. 2

    如何在不进行强制转换的情况下取消引用void变量

  3. 3

    将null强制转换为任何类型

  4. 4

    为什么我们可以在不强制转换的情况下将32位的立即数整数赋给short类型的变量?

  5. 5

    如何在有条件的情况下将指针强制转换为基本类型的指针

  6. 6

    使用按位将 char 值存储在 int 上,并在不进行强制转换的情况下将其取回时保持值符号值正确

  7. 7

    为什么在选择器不起作用的情况下强制类型转换起作用

  8. 8

    为什么在选择器不起作用的情况下强制类型转换起作用

  9. 9

    Pig:如何将所有元组发送到UDF而不进行分组处理?或者如何在不分组的情况下将元组转换为Bag?

  10. 10

    是否可以像在Javascript对象中一样将整数值存储在localStorage中并在不进行类型转换的情况下提取它?

  11. 11

    为什么在不使用static_cast的情况下对const void *进行类型转换是合法的,而不是C ++中的C ++

  12. 12

    为什么在某些情况下可以将布尔值转换为字符串,而在其他情况下则不能?

  13. 13

    如何在不进行NSData转换的情况下将url图像传递给ios中的按钮

  14. 14

    在不进行编码的情况下将字符串与字节数组之间来回转换

  15. 15

    将正则表达式转换为更具体

  16. 16

    在不丢失任何格式的情况下将Docx文件转换为PDF

  17. 17

    如何在没有任何模块的情况下将日历日期转换为顺序日期

  18. 18

    为什么在没有任何未经检查的类型警告的情况下进行编译?

  19. 19

    为什么在使用通用约束时无法将具体类型转换为接口

  20. 20

    TypeScript:强制将变量识别为一种类型而不进行强制转换

  21. 21

    为什么将通用返回类型强制转换为另一个通用类型?

  22. 22

    在设计时不知道类型的情况下,如何将int转换为Enum?

  23. 23

    在没有样板的情况下将类型从“ T a”转换为“ T b”

  24. 24

    在基本字段类型相同的情况下将TypeA转换为TypeB

  25. 25

    在不更改对象类型的情况下将早期绑定转换为后期绑定

  26. 26

    在不知道列类型的情况下将NULL值转换为“ UNKNOWN”

  27. 27

    如何在不删除字符的情况下将SQLCHAR [200]类型转换为std :: string?

  28. 28

    在设计时不知道类型的情况下,如何将int转换为Enum?

  29. 29

    为什么在某些情况下 Python 中的类型转换/乘法会失败?

热门标签

归档