简介
TypeScript支持的数据类型与JavaScript基本一样,另外提供了枚举类型
。还有几个特殊类型:any
,void
,never
。
下面写一些例子去理解TypeScript的数据类型使用。
原始类型
// boolean
let success: boolean = true;
// number
let num1: number = 12;
let num2: number = 0xab; // 支持多种进制
// string
let str1: string = 'abc';
除上述示例,还有null, undefined, symbol类型,可以参看文档。
数组和元组
数组有两种声明方式:
let arr1: string[] = ['hello', 'world'];
let arr2: Array<string> = ['hello', 'world'];
元组是一种特殊的数组
let arr1: [string, number] = ['hello', 123];
arr1[3] = 'world'; // 越界时:string | number
元组越界时,会以联合类型来处理,即越界的元素可以元组中的任意一种类型。
枚举
枚举类型与C#,Java语言相比,另外提供了一个便利特性,可以拿到枚举的名称。
enum Color {Red = 1, Green, Blue}
let colorName: string = Color[2];
console.log(colorName); // 显示'Green'因为上面代码里它的值是2
any, void
-
any表示任意类型,可以在类型不确定时使用(能不用就不要用),如:
- 第三方的返回值,你无法确定类型
- 你不确定你将会用到哪些类型
- void正好相反,表示没有类型,一般用于没有返回值的函数
null, undefined
- 类型定义和JavaScript一致
- TypeScript里面,可以赋给:本身类型、any、void
object
object类型是基本的6个类型之外的其他类型的基类。
使用时需注意,用object声明时,后面只能当object使用,如:
let a: object = new Date();
a.hasOwnProperty('name'); // ok
a.getDate(); // error
never
never是个比较特殊的类型,表示永远不会到达。
典型的场景就是异常抛出函数的返回值。另外,不可达分支也可以用,帮助判断是否列全分支。
// 抛出异常的函数
function bizError(code: number, msg: string): never {
throw new Error({
code,
msg
});
}
// 不可达的分支
function foo(n: 0 | 1) {
switch(n) {
case 0:
return 'A'
case 1:
return 'B'
default:
const _never: never = n
return n
}
}
类型断言
类型断言,我觉得也可以理解为强制类型转换。
这个特性和强类型语言类型,看几个例子理解一下:
// 尖括号
let var1: any = 'abc';
console.log((<string>var1).substring(1));
// as
let var2: object = new Array<number>();
console.log((var2 as Array<number>).push(1));
类型推断
有些情况下,不需要指明变量类型,TypeScript可以根据上下文自动推断类型。如下示例:
let a = 'abc';
console.log(a.substring(1));
let obj1 = {
str1: 'abc',
num1: 123
};
let { str1, num1 } = obj1;
参考
- TypeScript语言手册 https://www.tslang.cn/docs/ha...
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。