TS 与 ES6
什么是 ts
TypeScript 是 JavaScript 的超集,是添加了类型系统的 JavaScript。
可通过编译器(比如tsc),将后缀名为.ts的文件编译为普通的JS文件,所以不存在跟浏览器不兼容的问题。
它是纯面向对象的,支持静态类型。
ts 与 js 区别
| typescript | javascript |
|---|---|
| 面向对象的语言 | 脚本语言 |
| 静态类型 | 没有静态类型 |
| 支持可选参数 | 不支持可选参数 |
| 支持接口 | 不支持接口 |
为什么在项目中使用typescript
使用 ECMAScript 的新功能
TypeScript完全兼容ES各个版本的语法,可以使用ES2015及更高版本的功能。静态类型
静态类型可以在运行前发现一部分潜在的bug,可在编写代码时发现错误。
TypeScript 几乎不限制 JavaScript 中原有的隐式类型转换,只是提前了类型检查的时机,通过类型推导在编译时确定结果。IDE 支持
IDE对TypeScript具有出色的支持,例如VS Code,TS帮助IDE做代码提示、代码补全、接口提示、跳转到定义等
ts的缺点
- 一些JavaScript库需要兼容,提供声明文件
- ts编译是需要时间的,这就意味着项目大了以后,开发环境启动和生产环境打包的速度就成了考验
什么是静态类型的语言
静态类型语言中,变量的类型必须先声明。
比如 一旦声明一个变量是number类型,之后就只能将number类型的数据赋值给它,否则就会引发错误,而动态类型则没有这样的限制,你将什么类型的数据赋值给变量,这个变量就是什么类型
动态类型=>运行时检查。静态类型=>编译期检查
什么是泛型
泛型是指在定义函数、接口或类的时候,不预先指定具体的类型,使用时再去指定类型的一种特性。
比如需求场景: 希望传入的值是什么类型,返回的值就是什么类型
传入的值可以是任意的类型,这时候就可以用到 泛型
如果使用 any 的话,就失去了类型检查的意义;
如果对每种类型都得定义一种函数,非常不合理
如果使用函数重载,写法有点麻烦
可以使用泛型, 有关联的地方都改成 <T>,使用的时候再指定类型
1 | function createArray<T>(length: number, value: T): Array<T> { |
ts 的变量声明
在 TypeScript 中,声明变量类型的语法,是在变量名称后有一个冒号 : ,后跟其类型。
eg:let age : number = 20
1 | interface IItem { |
ts 中内置的基础数据类型
常用:boolean、number、string、array、enum、any、void
ts 中的类
一个类包括以下内容:
构造器(Constructor)
属性(Properties)
方法(Methods)
访问修饰符
TypeScript支持访问修饰符决定了类成员的可访问性:
公共(public),类的所有成员,其子类以及该类的实例都可以访问。
受保护(protected),该类及其子类的所有成员都可以访问它们。 但是该类的实例无法访问。
私有(private),只有类的成员可以访问它们。
ts 中的void
void: 没有任何类型。例如:一个函数如果没有返回值,那么返回值可以定义为void。
tsconfig.json文件
目录中包含tsconfig.json文件,表明该目录是TypeScript项目的根目录。
ts根据它的信息来对代码进行编译
常用配置
- 一
include : 用来指定哪些文件需要被编译
exclude : 用来指定哪些文件不需要被编译 :默认node_module
extends : 用来指定继承的配置文件
files : 用来指定被编译的文件列表,只有编译少量文件才使用
compilerOptions : 编译器的选项是配置文件中非常重要也是非常复杂的配置选项 - 二 compilerOptions里的配置
target
用来指定 ES 版本。 tips: ESNext是指最新版
‘ES3’, ‘ES5’, ‘ES6’/‘ES2015’, ‘ES2016’, ‘ES2017’, ‘ES2018’, ‘ES2019’, ‘ES2020’, ‘ESNext’
eg."target": "ES2020"module
指定要使用模块化的规范 : ‘None’, ‘CommonJS’, ‘AMD’, ‘System’, ‘UMD’, ‘ES6’/‘ES2015’
eg."module": "CommonJS"
如何在ts项目中引入js的 npm包
- 优先选择安装其npm包的typescript版本
npm install @types/包名 --save - 还可以单独编写.d.ts文件
例如:
用 ts 写的模块,在发布的时候仍然是用 js 发布,
这就导致一个问题:ts 那么多类型数据都没了。
所以需要一个 d.ts 文件来标记某个 js 库里的对象的类型
tips: typings 就是一个网络上的 d.ts 数据库
- 本文作者:JSZ
- 本文链接:blog.vampuck.com/2022/03/25/ts_es6/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!