基础类型
布尔值
let isDone: boolean = false
数字
let decLiteral: number = 6
let hexLiteral: number = 0xf00d
let binaryLiteral: number = 0b1010
let octalLiteral: number = 0o744
字符串
let name: string = "bob"
let age: number = 37
//也可以使用ES6模板字符串 `` 和 ${}
let sentence: string = ` Hello, my name is ${name}. I'll be ${age +
1} years old next month.`
数组
两种方式定义数组:
- 在元素类型后面接上[],表示由此类型元素组成的一个数组:
let list: number[] = [1, 2, 3]
- 使用数组泛型,Array<元素类型>:
let list: Array<number> = [1, 2, 3]
元祖 Tuple
元祖可以表示一个已知元素数量和类型的数组,各元素的类型不必相同。
let x: [string, number]; //定义一对值分别为string和number类型的元祖
x = ['hello',10]; //OK
x = [10, 'hello]; //报错
枚举
enum类型是对 JS 数据类型的一个补充,它表示的是一个命名元素的集合。
//命名元素集合里面的值,默认为递增的 0,1,2,3...
enum Color {
Red,
Green,
Blue
}
let c: Color = Color.Green // 1
//也可以显示指定值,没有被指定的会默认在前面的值递增
enum Color {
Red = 1,
Green,
Blue = 4
}
let c: Color = Color.Green // 2
//当然,你也可以用值来得到对应的名称是什么,但是如果没有与之对应的枚举项就是 undefined
enum Coloe {
Red = 1,
Green,
Blue
}
let colorName: string = Color[2] // 'Green'
let colorName: string = Color[Color.Green] // 'Green'
任意值
当我们并不清楚这个变量的类型的时候,可以用any类型来标记这些变量
let notSure: any = 4
notSure = "可能是个字符串呢"
notSure = false //这必须是个布尔值了 = =
空值
void类型像是与any类型相反,它表示没有任何类型。
当一个函数没有返回值时,它的返回值类型通常就是void。
function warnUser(): void {
alert("这是一条警告信息")
}
声明一个void类型的变量没有什么大用,因为你只能为它赋予 undefined 和 null 。
let unusable: void = undefined
Null 和 Undefined
默认情况下null和undefined是所有类型的子类型。
Never
never类型表示的是那些永不存在的值的类型。 例如,never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型; 变量也可能是never类型,当它们被永不为真的类型保护所约束时。
never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使any也不可以赋值给never。
let x: never
let y: number
//运行错误,数字类型不能转为never类型
x = 123
//运行正确,never 类型可以赋值给 never类型
x = (() => {
throw new Error("exception")
})()
//运行正确, never 类型可以赋值给 数字类型
y = (() => {
throw new Error("exception")
})()
//返回值为 never 的函数可以是抛出异常的情况
function error(message: string): never {
throw new Error(message)
}
//返回值为 never 的函数可以是无限循环这种无法被执行到的终止点的情况
function loop(): never {
while (true) {}
}
Object
object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。
类型断言
通过类型断言这种方式可以告诉编译器,“相信我,我知道自己在干什么”。 类型断言好比其它语言里的类型转换,但是不进行特殊的数据检查和解构。 它没有运行时的影响,只是在编译阶段起作用。 TypeScript 会假设你,程序员,已经进行了必须的检查。
类型断言有两种形式。 其一是“尖括号”语法:
let someValue: any = "this is a string"
let strLength: number = (<string>someValue).length
另一种为 as 语法:
let someValue: any = "this is a string"
let strLength: number = (someValue as string).length