持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第31天,点击查看活动详情juejin.cn/post/714765…
什么是TypeScript?
添加了类型系统的 JavaScript,适用于任何规格的项目。
- JS非常灵活,使得JS没有约束性,代码太多的话,容易出现问题。TS就是弥补JS非常灵活的缺点。
- js代码有错的话,只有在运行时(控制台里报错)才会知道,编译时不知道。TS在运行前需要先编译为JS,而在编译阶段就会进行检查,TS是静态类型。
- TS需要转换成JS才能编译。
- TS中声明类型以后,那么只能放声明的类型的值。
- TS内置了类型推论。
类型系统按照「类型检查的时机」来分类,可以分为动态类型和静态类型。
TypeScript是静态类型,JavaScript是动态类型。js和ts都是弱类型。因为他们都允许隐式进行类型转换。TS中并不是所有的变量都需要声明类型,它内部有类型推论。TS基于JS的,所以它紧跟ECMAScript的标准。TS可以编写tsconfig.js文件,从而设置类型检查的严格程度。- 浏览器不支持
TS,必须把TS编译成JS进行打包。webpack支持编译TS。VScode也支持编译TS,因为它本身就使用TS开发的。
安装
- 全局安装:
cnpm i -g typescript用来检测ts代码 - 注意:
webpack,VScode本身就带有编译功能,所以不需要安装 - 编译ts文件命令:
tsc 文件名.ts,例如:tsc demo.ts。
当声明的类型和值不匹配的话,也会编译成功,仍然可以使用这个文件,是否能编译成功可以手动设置
TypeScript 只会在编译时对类型进行静态检查,如果发现有错误,编译的时候就会报错。而在运行时,与普通的 JavaScript 文件一样,不会对类型进行检查。
TS中声明5种基本类型
Boolean布尔值
let isDone: boolean = false;//不报错
const a:boolean = new Boolean();//报错
const a:boolean = Boolean(1);//不报错
注意:如果我们通过new Boolean()创建出来的boolean对象不是布尔值类型,编译时会报错,调用的Boolean(1)方法,返回的是布尔型,所以编译时不会报错。
Number 数值型
有一些特殊情况也会被推断为数值型。
let a:number = 1;
let b:number = 1a09;
// ES6 中的二进制表示法
let binaryLiteral: number = 0b1010;
let notANumber: number = NaN;
let infinityNumber: number = Infinity;
String字符串类型
void空值
- 都是用来声明函数的返回值是空值。也就是没有return的时候就是function a():void{}
- 声明一个
void类型的变量没有什么用,因为你只能将它赋值为undefined和null(只在 --strictNullChecks 未指定时): undefined和null这个值(注意不是类型,只是这个单词)可以作为给任何类型的值- 如果一个变量的类型声明式null或者undefined,那么这个变量的值只能是null或者undefined。
任意值Any
- 用法:声明一个变量
- 任意值可以访问任意属性和方法,即使这个变量没有属性和方法,编译时不会报错,但运行时就会报错了,因为没有这个属性或方法。
变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型:
let something;
something = 'seven';
something = 7;
something.setName('Tom');
等价于
let something: any;
something = 'seven';
something = 7;
something.setName('Tom');
什么是类型推论
TypeScript 会在没有明确的指定类型的时候推测出一个类型,这就是类型推论。