1.布尔类型,只有true和false两种类型
let isDone: boolean = true let isStart: boolean = false
2.数字,有4种分别是十进制,十六进制,二进制和八进制
//用不同进制表示20 let decLiteral: number = 20 //十进制 let hexLiteral: number = 0x14//十六进制 let binaryLiteral: number = 0b10100//二进制 let octalLiteral: number = 0o24//八进制 console.log(decLiteral,decLiteral,binaryLiteral,octalLiteral)
tsc编译后
//用不同进制表示20 var decLiteral = 20; //十进制 var hexLiteral = 0x14; //十六进制 var binaryLiteral = 20; //二进制 var octalLiteral = 20; //八进制 console.log(decLiteral, decLiteral, binaryLiteral, octalLiteral);//20 20 20 20
3.字符串
字符串可以用单引号去表示也可以用双引号表示,为了表示统一,我们一致用单引号表示
let myName: string = 'cc' let age: number = 18 let sentence = ` my name is ${myName} I will be ${age} years old next month. `//字符串可以这样表示 console.log(sentence)//my name is cc I will be 18 years old next month.
4.数组一般有两种方式表示
let list: number[] = [1,2,3]//推荐这种 let list1: Array<number> = [1,2,3]//数组泛型,和上方表示的意思一样 //这两种方式数组里面只能填写数字
5.元祖
表示数组的类型和长度是已知的
let x: [string,number] x = ['hello', 10] console.log(x[0].substr(1))//这种方法是可行的,因为第一个元素是string x[3] = 5 x[4] = 'cc'//这两种方法给越界元素赋值是可行的,越界元素实际上是联合类型 console.log(x[5].toString())//3.1版本后会报Tuple type '[string, number]' of length '2' has no element at index '5'. x[7] = true //此种不可行,超越了刚才定义的元祖类型
6.枚举类型
注意枚举类型的元素首字母是大写的
// enum Color { // Red, // Green, // Blue // } //可以像对象一样取出值 // let c:Color = Color.Blue //枚举类型默认是从0开始编号的,我们可以修改,可以指定不同的编号,不必连续 enum Color { Red = 1, Green = 2, Blue = 3 } let colorName:string = Color[2] //我们可以根据值的编号来反查值 console.log(colorName)//green
为什么可以根据编号查询到值呢,可以看编译后的文件
var Color; (function (Color) { Color[Color["Red"] = 1] = "Red"; Color[Color["Green"] = 2] = "Green"; Color[Color["Blue"] = 3] = "Blue"; })(Color || (Color = {})); var colorName = Color[2]; //我们可以根据值的编号来反查值 console.log(colorName); //green
7.any类型
我们不清楚的类型,或者是动态类型等可以赋值成any, typeScript不会做语法检查
let notSure:any = 4 notSure = 'maybe a string instead' notSure = true //这样都是可以的,因为ts会跳过语法检查 let list: any = [1,'cc',true]//这样是可行的,对于数组来说非常有用
8.void类型
void是和any相反的,void表示不返回任何值
function warnUser(): void{ console.log('This is my warnning message') } let undecleared: void = null let undecleared1: void = undefined//给变量赋值给void是没意义的,只能赋值成null或者undefined
9.null和undefined
let n: null = null let u: undefined = undefined let n1: null = undefined let u1: undefined = null //null和undefined是其他数值的子类型,子类型是可以给父类型赋值的 let num:number = 3 num = null //在这里是没有报错的,如果编译的时候加上--strictNullChecks会报错 //Type 'undefined' is not assignable to type 'null'. //Type 'null' is not assignable to type 'undefined'. // Type 'null' is not assignable to type 'number'. //如果我们非得赋值给null可以使用联合类型 let num1: number | null = 3//联合类型 num1 = null
10.never
表示永远不存在的数值类型,never是所有数值的子类型
//程序报错时使用 function error(msg: string): never{ throw new Error(msg) } function fail() { return error('something faild') } //无限循环时使用 function inifinitelLoop(): never { while(true){ } }
11.object
declare function create(o:object | null): void; create({prop: 0}) create(null) //下面是不可行的 create(42) create('123') create(true)
12.类型断言
代表你会比ts更了解某个值的类型或详细信息
let someValue: any = 'this is a string' // let strLength:number = (<string>someValue).length let strLength:number = (someValue as string).length //上述两种断言表示的意思一样
2019-05-23 15:20:15