TypeScript:基本类型详解
布尔值(Boolean)
TypeScript的布尔值和JavaScript一样有两个值:true和false。
类型标识:boolean
示例:
let isDone: boolean = false;
数字(Number)
和JavaScript一样,TypeScript的所有数字都是用浮点数表示,支持二进制,八进制,十进制以及十六进制的表示方式,
类型标识:number。
示例:
let decimal: number = 6; //十进制
let hex: number = 0xf00d; //十六进制,以0x开头,0x后面数值为十六进制
let binary: number = 0b1010; //二进制,以0b开头,0b后面数值为二进制
let octal: number = 0o744; //八进制,以0o开头,0o后面为八进制
字符串(String)
TypeScript字符串是使用双引号或单引号括起来的文本。
类型标识:string
示例:
let color: string = "blue";
color = 'red';
字符串拼接
使用加号(+)拼接多个字符串以及变量。
let hello: string = "Hello";
let helloWorld: string = hello + ",World!";
模板字符串
在TypeScript,字符串除了使用双引号或单引号括起来这种常见的表示形式外,还可以使用反引号(`)括起来。使用反引号括起来的字符串称为模板字符串(template string)。
使用双引号或单引号括起来的字符串只能使用单行表示,而模板字符串可以在反引号内使用多行表示,及嵌入表达式。表达式形式为${expr}。
示例:
let fullName: string = `Bob Bobbington`;
let age: number = 37;
let sentence: string = `Hello, my name is ${ fullName }.
I'll be ${ age + 1 } years old next month.`;
等同于字符串拼接
let sentence: string = "Hello, my name is " + fullName + ".\n\n" +
"I'll be " + (age + 1) + " years old next month.";
显然,模板字符串避免了字符串拼接的不便。
数组(Array)
数组有两种表示形式:类型[]和泛型Array<类型>,其中这里的类型为数组的元素类型。
类型[]
let list: number[] = [1, 2, 3];
Array<类型>
let list: Array<number> = [1, 2, 3];
元组(Tuple)
数组(Array)要求元素类型必须一样,而元组类似数组,和数组不一样的地方是,元组里元素类型可以不一样。
表示形式:[类型1,类型2,类型3...],其中类型n表示元组里此位置的元素类型。
示例:
//元组
let x: [string, number];
//初始元组,要求值的类型需要和声明的类型一致
x = ["hello", 10];
// 错误的初始化
x = [10, "hello"]; // Error
用下标来使用元组元素,下标索引从0开始:
let s1 = x[0]; //引用
x[1] = 100; //赋值
枚举(Enum)
枚举表示一个数据类型集。
类型标识:enum,
表示方式: enum 枚举名{枚举值1,枚举值2...}
示例:
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
TypeScript会给每个枚举值内置一个计数,计数默认从0开始,即上面例子的Color枚举,Red计数为0,Green为1,Blue为2。支持自定义计数的初始值。
从1开始计算数
enum Color {Red = 1, Green, Blue}
let c: Color = Color.Green;
自定义计数值
enum Color {Red = 1, Green = 2, Blue = 4}
let c: Color = Color.Green;
每个枚举值对应一个计数,TypeScript支持使用下标[]来获取枚举值,其中,下标里的数字为枚举值对应的计数。
enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];
alert(colorName);
Any
声明为any的值是可以被赋予任何类型的数据,编译器不会对any类型的值做检查,也不会检查它的属性和方法。这是有区别与声明为Object的值。
类型标识:any
示例:
let notSure: any = 4; //number类型
notSure = "maybe a string instead"; //也可以被赋值为string类型
notSure = false; // 也可以被赋值为boolean类型
方法的检查
let notSure: any = 4;
notSure.ifItExists(); // 编译器不做检查
notSure.toFixed(); // 编译器不做检查
let prettySure: Object = 4;
prettySure.toFixed(); // 编译出错,因为Object类不存在toFiexd()方法
Void
void类型刚好与any类型相对,表示缺失类型,它用在方法或函数没有返回值的情况。
function warnUser(): void {
alert("This is my warning message");
}
Null and Undefined
TypeScript里值为null和undefined对应的类型也分别是null和undefined。直接声明变量为null或者undefined没有实际意义。
默认情况下,null和undefined是所有类型的子类型,它们可以被赋值给任何类型。
let n: number= null;
可以开启--strictNullChecks选项,这样null和undefined只能被赋值给void类型,不能赋值给其他类型。
Never
never为TypeScript2.0新增的原始类型,它表示那些从不出现的值的类型。它可以是总是抛出异常的函数表达式或箭头函数表达式返回的类型,也可以是永远不返回值得返回类型。
类型标识:never
never是任何类型的子类型,可以赋值给任何类型,但它没有子类型,除了可以赋值为never外,不能被赋值为任何类型。
示例:
// Function returning never must have unreachable end point
function error(message: string): never {
throw new Error(message);
}
// Inferred return type is never
function fail() {
return error("Something failed");
}
// Function returning never must have unreachable end point
function infiniteLoop(): never {
while (true) {
}
}