美文网首页
typescript type

typescript type

作者: JunChow520 | 来源:发表于2021-05-16 01:13 被阅读0次

类型

  • JavaScript中的类型实际上是值的类型,这是动态类型语言的本质。
  • TypeScript中的类型实际上是变量的类型,这是静态类型语言的本质。

由于类型与值居住在不同的空间,相互自建不能访问,甚至不知道彼此的存在。因此类型不能当作值来用,反之亦然。

TypeScript类型检查的基础是使用interface可以在类型空间上声明一个类型,类型空间内部也可以拥有子空间,可以使用namespacemodule来创建新的子空间,通过import/export导入导出来相交互。另外,TypeScript中使用declare可以在值空间上声明一个变量,这是TypeScript变量检查的基础。

TypeScript为JavaScript添加静态类型检查,要实现静态类型检查,首先需要的是类型系统。

TypeScript支持JavaScript中所有的类型,同时支持一些JavaScript中没有的类型(超集)。

TypeScript要想解决JavaScript动态语言类型太宽松的问题

  1. 需要提供给变量设定类型的能力,通过类型注解的语法实现。
  2. 需要提供常用类型并可以扩展出自定义的类型,通过提供诸如lib.d.ts等类型声明库文件来实现。
  3. 需要根据给变量设定的类型进行类型检查,禁止类型不兼容的赋值操作,禁止使用值空间和类型空间不存在的变量和类型等。通过interfacetype、函数类型等打通类型空间,通过declare等打通值空间,结合binder来进行类型诊断checker

类型系统

TypeScript的核心是类型系统,由于JavaScript急需一套合适的类型系统来支撑日益规模化的协作开发。

TypeScript和C#都是由微软的Anders Hejlsberg领导开发的编程语言,二者在类型系统上采用了不同的方式,C#采用的是标明类型系统(Norminal Type System),TypeScript考虑到JavaScript自身的灵活性采用的是结构类型系统(Structural Type System)。

总体上来说,面向对象型的语言更多会采用标明类型系统,函数式语言偏向于结构类型系统。然而JavaScript是一种非常独特的语言,两种编程范式兼而有之。

JavaScript是一门动态脚本语言,鸭子类型(Duck Typing)应用广泛。典型的比如Iterable,JavaScript中的迭代并不要求像C++要求实例必须继承自某个父类,或像Java要求实例必须实现某个Interface,JavaScript中的Iterable只需要检查当前对象是否实现了@@iterator方法。


集合与类型

TypeScript只检查类型定义的约束条件,这一点与集合(Set)的概念颇为相似。

类型推导

类型收缩(Type Narrowing)

类型编程

TypeScript不可对各种各类型进行类似集合一样的操作,还可以进行类型层面的编程。

泛型(Generics)

  • 主流开发语言通常会支持泛型以提供更加出色的抽象能力
  • 本质上泛型可视为一个类型层面的函数
  • 定义泛型时只需要定义逻辑处理过程,只有在用到具体输入类型调用时,才会得到真正的结构类型。

TypeScript的泛型是在类型空间编程(类型编程)

片段(Partial)

条件类型(Conditional Type)

  • 条件类型用来表述非单一形式的类型

递归

图灵完备(Turing Complete)

TypeScript是图灵完备的,它完全有能力完成任何类型层面的可计算问题。
TypeScript包含了一套完整的类型层面编程的能力
TypeScript解决各种类型问题,本质上他们的内核都是和图灵机等价。


类型保护

JavaScript中同构判断来处理逻辑,而在TypeScript中判断的条件语句还有另外一个特性,即根据判断逻辑的结果来缩小类型范围,这种特性又称为类型保护。

类型保护触发条件

  • 逻辑条件语句块:ifelseelseif
  • 特定关键字:typeofinstanceofin...

相关文章

网友评论

      本文标题:typescript type

      本文链接:https://www.haomeiwen.com/subject/hzdbdltx.html