基础类型
布尔值
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
默认情况下null
和undefined
是所有类型的子类型。 就是说你可以把 null
和undefined
赋值给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
表示非原始类型,也就是除number
,string
,boolean
,symbol
,null
或undefined
之外的类型。
使用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
}
}