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
//上述两种断言表示的意思一样