当前位置: 首页 > news >正文

TypeScript 深度剖析:TypeScript 的理解?与 JavaScript 的区别?

一、是什么

TypeScript 是 JavaScript 的类型的超集,支持ES6语法,支持面向对象编程的概念,如类、接口、继承、泛型等

超集,不得不说另外一个概念,子集,怎么理解这两个呢,举个例子,如果一个集合 A 里面的的所有元素集合 B 里面都存在,那么我们可以理解集合 B 是集合 A 的超集,集合 A 为集合 B 的子集

其是一种静态类型检查的语言,提供了类型注解,在代码编译阶段就可以检查出数据类型的错误

同时扩展了 JavaScript 的语法,所以任何现有的 JavaScript 程序可以不加改变的在 TypeScript 下工作

为了保证兼容性,TypeScript 在编译阶段需要编译器编译成纯 JavaScript 来运行,是为大型应用之开发而设计的语言,如下:

ts 文件如下:

const hello: string = "Hello World!";
console.log(hello);

编译文件后:

const hello = "Hello World!";
console.log(hello);

二、特性

TypeScript 的特性主要有如下:

  • 类型批注和编译时类型检查 :在编译时批注变量类型
  • 类型推断:ts 中没有批注变量类型会自动推断变量的类型
  • 类型擦除:在编译过程中批注的内容和接口会在运行时利用工具擦除
  • 接口:ts 中用接口来定义对象类型
  • 枚举:用于取值被限定在一定范围内的场景
  • Mixin:可以接受任意类型的值
  • 泛型编程:写代码时使用一些以后才指定的类型
  • 名字空间:名字只在该区域内有效,其他区域可重复使用该名字而不冲突
  • 元组:元组合并了不同类型的对象,相当于一个可以装不同类型数据的数组

类型批注

通过类型批注提供在编译时启动类型检查的静态类型,这是可选的,而且可以忽略而使用 JavaScript 常规的动态类型

function Add(left: number, right: number): number {return left + right;
}

对于基本类型的批注是 numberbool 和 string,而弱或动态类型的结构则是 any 类型

类型推断

当类型没有给出时,TypeScript 编译器利用类型推断来推断类型,如下:

let str = "string";

变量 str 被推断为字符串类型,这种推断发生在初始化变量和成员,设置默认参数值和决定函数返回值时

如果缺乏声明而不能推断出类型,那么它的类型被视作默认的动态 any 类型

接口

接口简单来说就是用来描述对象的类型 数据的类型有 numbernull string 等数据格式,对象的类型就是用接口来描述的

interface Person {name: string;age: number;
}let tom: Person = {name: "Tom",age: 25,
};

三、区别

  • TypeScript 是 JavaScript 的超集,扩展了 JavaScript 的语法
  • TypeScript 可处理已有的 JavaScript 代码,并只对其中的 TypeScript 代码进行编译
  • TypeScript 文件的后缀名 .ts (.ts,.tsx,.dts),JavaScript 文件是 .js
  • 在编写 TypeScript 的文件的时候就会自动编译成 js 文件

更多的区别如下图所示:

http://www.lryc.cn/news/36021.html

相关文章:

  • 美颜SDK关键技术讲解——人脸识别与人脸美化
  • Linux下C/C++ 网络扫描(主机扫描技术)
  • 无法将“vue-cli-service”项识别为 cmdlet、函数、脚本文件或不是内部命令的原因和解决方案
  • 逆流程 场景下 处理状态机变化的方案
  • 【剧前爆米花--爪哇岛寻宝】Java实现无头单向非循环链表和无头双向链表与相关题目
  • 学习MvvmLight工具
  • 基于BiLSTM+CRF医学病例命名实体识别项目
  • 05 C语言数据类型
  • C++11:右值引用和移动语义
  • tcpdump网络抓包工具
  • MaxCompute SQL中的所有保留字与关键字如下
  • Kafka 压缩算法
  • 关于React Hook(18)
  • 计算机网络:BGP协议
  • 91. 解码方法 ——【Leetcode每日刷题】
  • 人体存在传感器成品方案,精准感知静止存在,实时智能化感控技术
  • mysql连接池的实现
  • 哪种类型蓝牙耳机佩戴最舒服?舒适度最好的蓝牙耳机推荐
  • 2020蓝桥杯真题洁净数 C语言/C++
  • 【随笔二】useReducer详解及其应用场景
  • 打怪升级之istringstream介绍
  • 系统重装漏洞
  • C++面向对象编程之五:友元(friend)
  • [手写OS]动手实现一个OS 之X86实模式下的汇编开发
  • 【Linux内核二】常用的网络丢包错包debug工具介绍
  • qt控件增加渐变色效果
  • 【node : 无法将“node”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。 最全面有效的解决方案】
  • 打怪升级之字符串的分界符与字符串替换
  • 载荷台子使用方式
  • 1005 继续(3n + 1)猜想