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

TypeScript——笔试题/面试题

目录

1、TS的特征或理解

1.  类型系统

2. 适用于任何规模

3. 与标准同步

4. 缺点

2、TypeScript是什么


1、TS的特征或理解

1.  类型系统

1.TypeScript是静态类型:
类型系统按照「类型检查时机」来分类,可以分为动态类型和静态类型。
动态类型是指在运行时才会进行类型检查,这种语言的类型错误往往会导致运行时错误。JS是一门解释型语言,没有编译阶段,所以JS是动态类型。

2.TypeScript 是弱类型:
    类型系统按照「是否允许隐式类型转换」来分类,可以分为强类型和弱类型,TS是完全兼容JS的,它不会修改JS运行时的特性,所以它们都是弱类型。

例子:
console.log(1 + '1');
// 打印出字符串 '11', ts和js都不会报错

print(1 + '1')
Python 是强类型会报错
# TypeError: unsupported operand type(s) for +: 'int' and 'str' 

2. 适用于任何规模

1.TypeScript 非常适用于大型项目

这是显而易见的,类型系统可以为大型项目带来更高的可维护性,以及更少的 bug。

2.提高开发效率。

在中小型项目中推行 TypeScript 的最大障碍就是认为使用 TypeScript 需要写额外的代码,降低开发效率。但事实上,由于有[类型推论],大部分类型都不需要手动声明了。相反,TypeScript 增强了编辑器(IDE)的功能,包括代码补全、接口提示、跳转到定义、代码重构等,这在很大程度上提高了开发效率。而且 TypeScript 有近百个[编译选项],如果你认为类型检查过于严格,那么可以通过修改编译选项来降低类型检查的标准。

3.TypeScript 还可以和 JavaScript 共存。

这意味着如果你有一个使用 JavaScript 开发的旧项目,又想使用 TypeScript 的特性,那么你不需要急着把整个项目都迁移到 TypeScript,你可以使用 TypeScript 编写新文件,然后在后续更迭中逐步迁移旧文件。如果一些 JavaScript 文件的迁移成本太高,TypeScript 也提供了一个方案,可以让你在不修改 JavaScript 文件的前提下,编写一个[类型声明文件],实现旧项目的渐进式迁移。

4.代码补全和接口提示等功能都是 TypeScript

就算你从来没学习过 TypeScript,你也可能已经在不知不觉中使用到了 TypeScript——在 VSCode 编辑器中编写 JavaScript 时,代码补全和接口提示等功能就是通过 TypeScript Language Service 实现的

5.第三方库原生支持了 TypeScript

一些第三方库原生支持了 TypeScript,在使用时就能获得代码补全了,比如 Vue 3.0  React

3. 与标准同步

1.TypeScript 的另一个重要的特性就是坚持与 ECMAScript 标准同步发展。

ECMAScript 是 JavaScript 核心语法的标准,自 2015 年起,每年都会发布一个新版本,包含一些新的语法。

一个新的语法从提案到变成正式标准,需要经历以下几个阶段:

Stage 0:展示阶段,仅仅是提出了讨论、想法,尚未正式提案。
Stage 1:征求意见阶段,提供抽象的 API 描述,讨论可行性,关键算法等。
Stage 2:草案阶段,使用正式的规范语言精确描述其语法和语义。
Stage 3:候选人阶段,语法的设计工作已完成,需要浏览器、Node.js 等环境支持,搜集用户的反馈。
Stage 4:定案阶段,已准备好将其添加到正式的 ECMAScript 标准中。
一个语法进入到 Stage 3 阶段后,TypeScript 就会实现它。一方面,让我们可以尽早的使用到最新的语法,帮助它进入到下一个阶段;另一方面,处于 Stage 3 阶段的语法已经比较稳定了,基本不会有语法的变更,这使得我们能够放心的使用它

2.TypeScript 的发展历史
2012-10:微软发布了 TypeScript 第一个版本(0.8),此前已经在微软内部开发了两年。
2014-04:TypeScript 发布了 1.0 版本。
2014-10:Angular 发布了 2.0 版本,它是一个基于 TypeScript 开发的前端框架。
2015-01:ts-loader 发布,webpack 可以编译 TypeScript 文件了。
2015-04:微软发布了 Visual Studio Code,它内置了对 TypeScript 语言的支持,它自身也是用 TypeScript 开发的。
2016-05:@types/react 发布,TypeScript 可以开发 React 应用了。
2016-05:@types/node 发布,TypeScript 可以开发 Node.js 应用了。
2016-09:TypeScript 发布了 2.0 版本。
2018-06:TypeScript 发布了 3.0 版本。
2019-02:TypeScript 宣布由官方团队来维护 typescript-eslint,以支持在 TypeScript 文件中运行 ESLint 检查。
2020-05:Deno 发布了 1.0 版本,它是一个 JavaScript 和 TypeScript 运行时。
2020-08:TypeScript 发布了 4.0 版本。
2020-09:Vue 发布了 3.0 版本,官方支持 TypeScript。

4. 缺点

1.有一定的学习成本,需要理解接口(Interfaces)、泛型(Generics)、类(Class)、枚举类型(Enums)等前端工程师可能不是很熟悉的概念;


2.短期可能会增加一些开发成本,毕竟要多写一些类型的定义,不过对于一个需要长期维护的项目,TypeScript 能够减少其维护成本;


3.集成到构建流程需要一些工作量;ts-loader (需要运行,因为不能运行)


4.可能和一些库结合的不是很完美;

2、TypeScript是什么

  • TypeScript 是添加了类型系统的 JavaScript,适用于任何规模的项目。
  • TypeScript 是一门静态类型、弱类型的语言。
  • TypeScript 是完全兼容 JavaScript 的,它不会修改 JavaScript 运行时的特性。
  • TypeScript 可以编译为 JavaScript,然后运行在浏览器、Node.js 等任何能运行 JavaScript 的环境中。
  • TypeScript 拥有很多编译选项,类型检查的严格程度由你决定。
  • TypeScript 可以和 JavaScript 共存,这意味着 JavaScript 项目能够渐进式的迁移到 TypeScript。
  • TypeScript 增强了编辑器(IDE)的功能,提供了代码补全、接口提示、跳转到定义、代码重构等能力。
  • TypeScript 拥有活跃的社区,大多数常用的第三方库都提供了类型声明。
  • TypeScript 与标准同步发展,符合最新的 ECMAScript 标准(stage 3)。

相关文章:

  • Vue入门【一】-- 基本模板语法
  • Vue入门【二】-- watch侦听器之普通监听与深度监听
  • 机器人地面站-[QGroundControl源码解析]-[6]-[AnalysizeView2]
  • FFmpeg入门详解之34:FFmpeg应用之视频播放器
  • 2022牛客多校(九)
  • Java常用类
  • [C/C++]_[初级]_[关于编译时出现有符号-无符号不匹配的警告-sizeof使用注意事项]
  • aarch64服务器-部署mysql
  • PDF转为网页文件怎么转?这篇文章告诉你
  • Java 基本数据类型-包装类-String的相互转换(总结+代码实现)
  • JUC并发编程
  • Spring注解驱动系列总结
  • 记一次mysql 命令行登录报错(error while loading shared libraries: libssl.so.1.1)
  • PyTorch中DataLoader及其与enumerate()用法介绍
  • mac 使用 PyQt5 和 py_designer 搭建窗体
  • python3.6+scrapy+mysql 爬虫实战
  • [译] 怎样写一个基础的编译器
  • Django 博客开发教程 8 - 博客文章详情页
  • exif信息对照
  • HTML-表单
  • leetcode386. Lexicographical Numbers
  • leetcode98. Validate Binary Search Tree
  • Map集合、散列表、红黑树介绍
  • Python爬虫--- 1.3 BS4库的解析器
  • Python语法速览与机器学习开发环境搭建
  • vuex 学习笔记 01
  • ------- 计算机网络基础
  • 跨域
  • 目录与文件属性:编写ls
  • 区块链分支循环
  • 区块链共识机制优缺点对比都是什么
  • 日剧·日综资源集合(建议收藏)
  • 数组大概知多少
  • 一个项目push到多个远程Git仓库
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)计算机毕业设计ssm本地美食推荐平台
  • (十六)串口UART
  • (四)搭建容器云管理平台笔记—安装ETCD(不使用证书)
  • (转)Linq学习笔记
  • (转)setTimeout 和 setInterval 的区别
  • (转)平衡树
  • ***利用Ms05002溢出找“肉鸡
  • **PyTorch月学习计划 - 第一周;第6-7天: 自动梯度(Autograd)**
  • .Net - 类的介绍
  • .NET 5种线程安全集合
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET中的十进制浮点类型,徐汇区网站设计
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • 。Net下Windows服务程序开发疑惑
  • @Valid和@NotNull字段校验使用