# 基础类型
Typescipt支持与JavaScript相同的数据类型,同时额外的提供了实用的枚举类型
# 布尔型 boolean
简单的 true/false 值
let tempVar: boolean = true
# 数字 number
与JS中一样,TS中的数字也全部都是浮点数。
let tempVar:number = 20
# 字符串 String
使用 ''
,""
,``包裹起来的一串字符文本。
let tempVar:string = '20'
# 数组 Array
TS与JS一样,都可以操作数组中的元素,但不同的是,TS中的数组元素类型受到声明元素的限制
let tempVar:number[] = [1,2,3] // 数组中元素只能是数字
let tempVar:Array<number> = [1,2,3] // 数组泛型定义,数组中元素只能是数字
# 元组 Tuple
元组类型表示一个已知元素数量和元素类型的数组,元素的类型无需相同
let tempVar: [number,string]
tempVar = [1,'1'] // OK
tempVar = ['1', 1] // Error
# 枚举 enum
枚举类型是ts对js数据类型的一个补充, 借助枚举类型可以为一组数值赋予友好的值
enum Color {Red, Green, Blue}
let c:Color = Color.Red
默认情况下,从 0
开始为元素编号。 当然,你也可以手动设定元素开始的编号:
enum Color {Red=1, Green, Blue}
let c:Color = Color.Red
你可以为每个元素成员设置不同的值
enum Color {Red = 1, Black, Green, Blue = 8}
console.log(Color)
{1: 'Red', 2: 'Black', 3: 'Green', 8: 'Blue', Red: 1, Black: 2, Green: 3, Blue: 8}
枚举类型提供的一个便利是你可以由枚举的值得到它的名字。
enum Color {Red = 1, Black, Green, Blue = 8}
let colorName: string = Color[2];
alert(colorName); // 显示'Black' 因为上面代码里它的值是2
# 任意值 any
有时候,我们需要或者编码时并不知道元素的类型,就可以 为它赋 any,用于跳过 TS 的类型检查,在你的代码中,尽量的减少 any 出现的次数
let tempVar: any = 4;
tempVar = "maybe a string instead";
tempVar = false; // okay, definitely a boolean
# 空值 void
某种程度上来说,void类型像是与any类型相反,它表示没有任何类型。
function warnUser(): void {
alert("This is my warning message");
}
声明一个void类型的变量没有什么大用,因为你只能为它赋予 undefined
和 null
:
let unusable: void = undefined;
# Null 和 Undefined
TypeScript里,undefined
和 null
两者各自有自己的类型分别叫做 undefined
和 null
。 和void相似,它们的本身的类型用处不是很大:
// Not much else we can assign to these variables!
let u: undefined = undefined;
let n: null = null;
默认情况下 null
和 undefined
是所有类型的子类型。 就是说你可以把 null
和 undefined
赋值给 number
类型的变量。
然而,当你指定了--strictNullChecks
标记,null
和undefined
只能赋值给void
和它们各自。 这能避免很多常见的问题。
也许在某处你想传入一个string
或null
或undefined
,你可以使用联合类型string | null | undefined
。
# Never
never 类型表示的是那些永不存在的值的类型。
never
类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never
的子类型或可以赋值给never
类型(除了never
本身之外)。 即使any也不可以赋值给never。
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message);
}
// 推断的返回值类型为never
function fail() {
return error("Something failed");
}
// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
while (true) {
}
}
# 类型断言
有时候你需要强转你变量的类型,就可以使用 类型断言。它没有运行时的影响,只是在编译阶段起作用。 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;
两种形式是等价的。 至于使用哪个大多数情况下是凭个人喜好;
然而,当你在TypeScript里使用JSX时,只有as
语法断言是被允许的。