布尔值
let isDone: boolean = false;
数字
let decLiteral: number = 6;
字符串
let str: string = 'test';
数组
这里有两种定义方法
// 方法一
let arr: number[] = [0, 1, 2];
// 方法二
let arr: Array<number> = [0, 1, 2];
定制数组(官方翻译作:元组)
let x: [string, number];
// Initialize it
x = ['hello', 10]; // OK
// Initialize it incorrectly
x = [10, 'hello']; // Error
注意
当访问一个越界的元素时,会使用联合类型进行处理(如上面例子里,越界的元素类型为 string|number)
x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型
console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toString
x[6] = true; // Error, 布尔不是(string | number)类型
枚举
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
默认情况下,枚举值从 0 开始,这里 Green 的值则为 1
也可以指定枚举值
enum Color {Red:1, Green, Blue}; // 从 1 开始,因此 Green=2,Blue=3
enum Color {Red:1, Green:2, Blue:4};
我们也可以根据枚举值得到定义的名字
enum Color {Red:1, Green, Blue}; // 从 1 开始,因此 Green=2,Blue=3
console.log(Color[2]); // Green
任意类型 any
定义为 any 的变量可以被赋值为任何类型的内容
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false;
Never
永远都不应该出现的类型,当他出现时,则表示代码存在问题,编译会失败
// 返回never的函数必须存在无法达到的终点
function error(message: string): never {
throw new Error(message);
}
// 推断的返回值类型为never
function fail() {
return error("Something failed");
}
// 返回never的函数必须存在无法达到的终点
function infiniteLoop(): never {
while (true) {
}
}
类型断言
程序员有时候会比程序更知道当前的 any 是什么类型,这里可以直接告诉 typescript
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
// 另一种写法
let strLength: number = (someValue as string).length;