目录
特征
类型系统
-
TypeScript是静态类型:
类型系统按照「类型检查时机」来分类,可以分为动态类型和静态类型。
动态类型是指在运行时才会进行类型检查,这种语言的类型错误往往会导致运行时错误。JS是一门解释型语言,没有编译阶段,所以JS是动态类型。 -
TypeScript 是弱类型:
类型系统按照「是否允许隐式类型转换」来分类,可以分为强类型和弱类型,TS是完全兼容JS的,它不会修改JS运行时的特性,所以他们都是弱类型。例子: console.log(1 + '1'); // 打印出字符串 '11', ts和js都不会报错
适用于任何规模
类型系统可以为大型项目带来更高的可维护性,以及更少的 bug。
与 ECMAScript 标准同步
环境搭建
1.安装node 16+
2.全局安装 typescript
npm i -g typescript
3.查看版本
tsc -v
4.创建tsconfig.js文件(在指定文件夹内)
tsc --init
5.编译ts文件(只将ts文件
转化为js文件
,不运行)
tsc index.ts
6.编译并运行
安装全局的ts-node模块
npm install -g ts-node
编译并运行ts文件
ts-node index.ts
变量声明
声明变量指定类型(任意类型都可),这样的变量赋值时只能使用指定类型的值
let a:number=20;
let b:String;//大写的是函数
let c:string='yes';
let d:boolean=true;
基础类型
类型推论
let a=200//a没有设置类型 在初始化后系统会给它设置一个类型// let a:number=20
a="wrong";//编译报错,因为a的类型为number
1.布尔值
let x:boolean
x=true
// x="hello"报错
x=100>200
console.log(x)
2.数字
let a:number=20
3.字符串
let c:string="yes!";
类型别名与联合类型
type关键字
type Mytype=number|string|boolean //使用type关键字,用类型别名保存联合类型
let x:Mytype
x=111
x="yes"
4.数组
单类型数组
let arr1:number[]
let arr2:Array<number>
多类型数组
1.
type Mytype2=string|number //联合类型
let arr3:Mytype[]
arr3=[111,"right"]
2.
let arr4:Array<number|string>
3.
let arr5:number[]|string[]
let arr6:(number|string)[]
5.元组Tuple
元组
:固定元素数量和类型(既不能使用方法添加元素,也不能删除元素)
let arr:[number,number]
arr=[100,200]
// arr=[100,"no"]报错
// arr[100]报错
解构赋值
let [xx,yy]:[number,string]=[100,'yes']
// 解构:元组=数据源
6.Null和Undefined
let a:undefined;
a=undefined;//undefined类型的数据只有一个值就是undefined ,可以赋值给void类型
let b:void;
b=a;
let a:null=null;//null类型的数据只有一个值就是null,可以赋值给void类型
let b:number=100;
// b=a;报错
let c:void;
c=a
7.Void
无效的,表示没有任何类型。 当一个函数没有返回值时,其返回值类型是 void
let a:void
function fn():void{
}
function fn2():number{
return 100
}
fn2()
8.枚举
枚举成员会被赋值为从 0 开始递增的数字,同时也会对枚举值到枚举名进行反向映射,也可以手动的指定成员的数值
enum day{a=100,b,c=80,d}
console.log(day.a,day.b,day.c,day.d)//100,101,80,81
day.b=2000//报错,只读属性
enum netWork{net2G,net3G,net4G,net5G,net6G}
function fn(x:number){
if(x==0){
console.log("做2g的网络请求")
}
else if(x==1){
console.log("做3g的网络请求")
}
else if(x==2){
console.log("做4g的网络请求")
}
else if(x==3){
console.log("做5g的网络请求")
}
else if(x==4){
console.log("做6g的网络请求")
}
}
fn(netWork.net6G)
9.Never
never
类型表示的是那些永不存在的值的类型。一般用于抛出错误
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message);
}
10.Object
let p1:object;//非基础类型,引用类型(只能是对象和数组为其赋值)
p1=[111,'yes']
p1={one:111,two:"yes"}
p1=[{},{name:111}]
11.Any
给编程阶段还不清楚类型的变量指定一个类型,这些值可能来自于动态的内容。
let a:any=100 //any类型的变量 可以赋值任何类型,任何类型都是any类型的子类型
a="hello"
a=[]
console.log(a)
let p1:any=1000 //any类型的数据 的任何成员 都是any类型的
let b=p1.age.x.x.x.x
console.log(b)