TypeScript自学---第一章:基础类型

基础类型

布尔值

let isDone: boolean = false

数字

let decLiteral: number = 6;
let hexLiteral: number = 0xf00d
let binaryLiteral: number = 0b1010
let octalLiteral: number = 0o744

字符串

单引号,双引号都可以

let str1:string = 'TypeScript'
let str2:string = "TypeScript"

模版字符串

let str1:string = 'TypeScript'
let longStr = `Hello ${str1}`

数组

第一种定义方式
let list: number[] = [1, 2, 3]
第二种定义方式
let list: Array = [1, 2, 3]

元组

表示一个已知元素数量和类型的数组,类型不必相同。

let tuple:[number,string,boolean] = [7,'TypeScript',true]

当访问一个越界的元素,会使用联合类型替代:

tuple[4] = 6
tuple[5] = 'Hello'
tuple[6] = false

枚举

默认情况下,从 0 开始为元素编号

enum Color {
    Red,
    Green,
    Blue
}

Red为编号 0 ,Green为编号 3 ,Blue为编号 4

enum Color {
    Red,
    Green = 3,
    Blue
}

枚举类型提供的一个便利是你可以由枚举的值得到它的名字。 例如,我们知道数值为2,但是不确定它映射到Color里的哪个名字,我们可以查找相应的名字。

Any

编程阶段并不知道使用哪一种类型,可以是任何的变量类型。
我们不希望类型检查器对这些值进行检查,是直接让它们通过编译阶段的检查。

let notSure:any = 4
notSure = 'Hello TypeScript' //正确

有一个数组,它包含了不同的类型的数据

let list:any[] = [7,'TypeScript',true]
list[1] = 777

Void

当一个函数没有返回值时,你通常会见到其返回值类型是 void,表示没有任何类型。

function greet():void {
    console.log("Hello TypeScript")
}

当一个函数没有返回值时,你通常会见到其返回值类型是 void

Null 和 Undefined

它们本身的类型用处不是很大

let u: undefined = undefined
let n: null = null

默认情况下nullundefined是所有类型的子类型。 就是说你可以把 nullundefined赋值给number类型的变量。

Never

never类型表示的是那些永不存在的值的类型。
官方给出了例子:

// 返回never的函数必须存在无法达到的终点 
function error(message:string):never{
    throw new Error(message)
}
// 推断的返回值类型为never 
function fail() { 
    return error("Something failed"); 
}
// 返回never的函数必须存在无法达到的终点 
function infiniteLoop(): never { 
    while (true) { } 
}

第一次学习就理解到这吧,以后深入了解。

Object

object表示非原始类型,也就是除numberstringbooleansymbolnullundefined之外的类型。
使用object类型可以更好表示Object.create

function Person(p:object):viod{
    console.log(p)
}
Person({name:'Lily'})

类型断言

有时你会比TypeScript更加清楚一个实体的类型。
那么我们就可以通过类型断言的方式告诉TypeScript,“相信我,我知道自己在干什么”
它没有运行时的影响,只是在编译阶段起作用。
例如:

function example(val:string | number):number{
  if(val.length){
    return val.length
  }else{
    return val.toString().length
  }
}

这样的逻辑本身没问题,但是在编译阶段一访问 val.length 时就报错了,因为 访问联合类型值的属性时,这个属性必须是所有可能类型的共有属性,而length不是共有属性,val 的类型此时也没确定,所以编译不通过。

// 尖括号断言形式
function example(val:string | number):number{
  if(val.length){
    return val.length
  }else{
    return val.toString().length
  }
}

// as断言形式
function example(val:string | number):number{
  if((val as string).length){
    return (val as string).length
  }else{
    return val.toString().length
  }
}

你可能感兴趣的:(typescript,es6,javascript,前端)