全局安装typescript,目的是使用这个tsc的命令工具去做ts文件的编译工作,编译时可配置的。
typescript是我们用的js的超集,也就是说它有的ts都包含,还增强增加了一些语法上的写法,比如适合大项目大团队开发的类型约束,使得弱类型的语言得到进一步的增强,个人认为越来越逼近java的写法。

1
npm install -g typescript

使用tsc xx.ts即可以编译出符合配置要求的js文件,当然如果编译出错会有出错提醒,编译不通过,但是ts仍然会给你编译出js文件,只是告诉你这个文件很可能达不到不是你期望的效果而已。

可约束的类型

1.布尔型boolean

2.数字number

3.字符串string

4.数组有两种定义方式
类型元素后跟[],如number[]
使用数组泛型,如Array<number>

5.元祖这个类型在js里并没有明确定义,它表示已知数量和类型的数组,如[string,number]表示可以接纳形如['age',20]这样的数组,如果数组的长度超过了现有定义的长度,那么超出的部分会从这两种类型里面选一种匹配,符合其中一种类型就可以,这叫做联合类型的匹配,这么表达string | number

6.枚举这个类型在js里并没有,但是是比较好用的约束一组已知的常量的类型,枚举就像集合,集合里有的就可以用,没有的就会报错,枚举里的值有两个名字,例如数字类型的枚举里一个是数值对应一个名字,两者可以相互映射。
我们表示星期用1`23`这样的数值分别表示周一到周日,那么周一到周日的名称和数值是一一对应的。

1
2
// 数值类型枚举
enum Days {MON = 1,TUE,WEN,THR,FRI,STA,SUN}

枚举的值默认是从0开始的,但是可以手动重写,后面的枚举值都会依次加1。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
let monday: Days = Days.MON // 1
let monday: Days = Days[1] // MON
// 枚举打出来为类似下面的对象,形成相互映射
let enumDays = {
MON:1,
TUE:2,
WEN:3,
THR:4,
FRI:5,
STA:6,
SUN:7,
'1':'MON',
'2':'TUE',
'3':'WEN',
'4':'THR',
'5':'FRI',
'6':'STA',
'7':'SUN'
}

Q:思考这个枚举类型有啥使用机会?

7.object
表示除numberstringbooleansymbolnullundefined之外的类型

8.null和undefined
默认情况下nullundefined是所有类型的子类型

1
2
3
4
5
6
7
8
function dosome(num: number){
return num*num
}
dosome() //错误
// 以下都是允许的
dosome(undefined)
dosome(null)
dosome(100)

9.void
表示没有任何类型。常用在当一个函数没有返回值时。

10.any 任意类型
注意类型里还有一个Object类型。虽然也能表示任意类型,但是作用和any不一样。Object只能赋值,不能读取其上的任意值。

1
2
let obj: Object = {name:'zhangsan'}
console.log(obj.name) // 错误!提示Object类型上没有name这个属性orz

11.never
never类型是任何类型的子类型,返回的值必须是不可能存在的值,即不可能赋值给任何一个变量,比如抛出的异常错误,注意无返回值不属于never,属于void

1
2
3
4
5
6
function error(message: string): never {
throw new Error(message);
}
function error(message: string): never {
// 注意无返回值不属于never,属于void
}

原创内容,欢迎交流转载请注明出处