基础类型
TypeScript支持与JavaScript几乎相同的数据类型,此外还提供了实用的枚举等类型方便我们使用。
TS中冒号后面的都为类型标识。
布尔值
1
| let bool:boolean = true;
|
数字
和JavaScript一样,TypeScript里的所有数字都是浮点数。 这些浮点数的类型是number。 除了支持十进制和十六进制字面量,TypeScript还支持ECMAScript 2015中引入的二进制和八进制字面量。
1 2 3 4
| let decLiteral: number = 6; let hexLiteral: number = 0xf00d; let binaryLiteral: number = 0b1010; let octalLiteral: number = 0o744;
|
字符串
1
| let str:string = 'hello langpz';
|
数组
声明数组中元素数据类型
1 2 3 4
| let arr1:number[] = [1,2,3]; let arr2:string[] = ['1','2','3']; let arr3:(number|string)[] = [1,'2',3]; let arr4:Array<number | string> = [1,'2',3];
|
元组类型
元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。
1 2 3
| let tuple:[string, boolean] = ['langpz',true]; // 像元组中增加数据,只能增加元组中存放的类型 tuple.push(1); // 会报错 Argument of type '1' is not assignable to parameter of type 'string | boolean'
|
null 和 undefined
任何类型的子类型,如果strictNullChecks的值为true,则不能把null 和 undefined付给其他类型。
1 2
| let name:number | boolean; name = null;
|
void类型
只能接受null,undefined。一般用于函数的返回值。严格模式下不能将null赋予给void。
1 2
| let a:void; a = undefined;
|
any类型
不进行类型检测,可以任意赋值。
1 2
| let s:any = 'langpz' s = 10
|
枚举类型
1 2 3 4 5 6
| enum USER_ROLE { USER, // 默认从0开始 ADMIN, MANAGER } // {"0": "USER", "1": "ADMIN", "2": "MANAGER", "USER": 0, "ADMIN": 1, "MANAGER": 2}
|
默认情况下,从0开始为元素编号。 你也可以手动的指定成员的数值。
1 2 3 4 5 6
| enum USER_ROLE { USER = 'langpz', ADMIN = 1, MANAGER, } // {"1": "ADMIN", "2": "MANAGER", "USER": "langpz", "ADMIN": 1, "MANAGER": 2}
|
never类型
任何类型的子类型,never代表永不存在的值。不能把其他类型赋值给never。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| function error(message: string): never { throw new Error("err"); } function loop(): never { while (true) { } } function fn(x:number | string){ if(typeof x == 'number'){
}else if(typeof x === 'string'){
}else{ console.log(x); } }
|
Symbol类型
Symbol的值是不可变且唯一的。
1 2 3
| const s1 = Symbol('langpz'); const s2 = Symbol('langpz'); console.log(s1 == s2);
|
BigInt类型
JavaScript 中可以用 Number 表示的最大整数为 2^53 - 1,可以写为 Number.MAX_SAFE_INTEGER。如果超过了这个界限,可以用 BigInt来表示,它可以表示任意大的整数。
1 2 3 4 5 6
| const theBiggestInt: bigint = 9007199254740991n const alsoHuge: bigint = BigInt(9007199254740991) const hugeString: bigint = BigInt("9007199254740991")
console.log(theBiggestInt === alsoHuge) console.log(theBiggestInt === hugeString)
|
object对象类型
object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型。
1 2 3 4 5 6 7
| let create = (obj:object):void=>{}
create({ prop: 0 }); // OK create(null); // OK
create(42); // Error create("string"); // Error
|
类型断言
类型断言允许您告诉编译器一个值的类型,并且您可以使用两种语法进行类型断言。
1 2 3 4
| let value: any = "langpz"; let length: number = (value as string).length;
let length2: number = (<string>value).length;
|