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

posted on 2019-05-23 15:21  旧梦丶  阅读(154)  评论(0编辑  收藏  举报