与Javascript语言一样,TypeScript也支持几种基本的数据类型,如布尔类型、数值类型、字符串类型。除了以上几种基本类型,TypeScript同时也提供几种独特的数据类型。
布尔类型只支持两种值:true
/false
。
let done: boolean = false;
数值类型变量允许使用十六进制、十进制、八进制、二进制字面量赋值。
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
TypeScript中字符串值允许使用双引号"
或单引号'
标记。
let color: string = "blue";
color = 'red';
同时,TypeScript支持模板字符串(template strings),允许跨越多行定义字符串值,并且允许在字符串内嵌入表达式,模板字符串使用反引号```标记。
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.`
TypeScript中的数组为强类型数组,也就是说数组元素的类型必须与定义数组时指定的类型一致。
第一种方法:
let list: number[] = [1, 2, 3];
第二种方法:
let list: Array<number> = [1, 2, 3];
元祖类型用于定义元素数量一定的数组,但是元素类型不需要一致。
// Declare a tuple type
let x: [string, number];
// Initialize it
x = ["hello", 10]; // OK
enum Color {Red, Green, Blue};
let c: Color = Color.Green;
作为动态语言,当无法确定变量的类型时,Any类型是一个很好的选择,定义为Any类型的变量在编译时并不会进行类型检查。
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean
当一个函数不返回任何值时,可以指定该函数返回值为Void类型。
function warnUser(): void {
alert("This is my warning message");
}
如果将一个变量定义为Void类型,那么该变量只能赋值为undefined
或null
。
let unusable: void = undefined;
Undefined类型变量只能赋值为undefined
。
Null类型变量只能赋值为null
。
// Not much else we can assign to these variables!
let u: undefined = undefined;
let n: null = null;
理论上,
undefined
和null
值允许赋值为任何类型的变量,但是不建议这么做。
当一个函数始终抛出异常或始终不会返回时,可以指定该函数返回类型为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) {
}
}