TypeScript-简单类型
小开开 2020-12-10 17:16:03 2020-12-10 250 0
数字类型
数字类型关键字为 number
,所有数字都是浮点数
let intLiteral: number = 6;let floatLiteral: number = 3.1415;
布尔类型
布尔类型关键字为 boolean
,仅有两个值 true
和 false
let isDone: boolean = false;isDone = true;
字符串类型
字符串类型关键字为 string
let name: string = "bob";
符号类型
符号类型关键字为 symbol
let sym: symbol = Symbol(); let sym1: symbol = Symbol('test');
Void类型
Void类型关键字为 void
, Void类型 表示没有类型或空类型。
当一个函数没有返回值时,你可以显式指定返回值为 void
;如果不显式指定,会被自动推导为 Void类型
// 显式指定返回类型为 voidfunction hi(): void { /**函数体为空**/ }// 和上面等价,返回值会被自动推导为 voidfunction hi() { /**函数体为空**/ }
显式声明一个值为 Void类型 是合法的,但没什么意义,因为你只能为它赋值undefined
或 null
let x: void = undefined;// 仅在 strictNullChecks 编译选项关闭时合法let y: void = null;
当把
null
赋值给 Void类型 的时候,仅在 strictNullChecks 编译选项关闭时才合法
Null类型 和 Undefined类型
- Null类型关键字为
null
- Undefined类型关键字为
undefined
null
和undefined
既可以是类型关键字,也可以是值,参靠下面示例代码
Null类型和Undefined类型的类型表现和编译选项 strictNullChecks
有关,上面已经提到这个选项。编译相关的教程后面会有专门的介绍,此处不做讲解。
strictNullChecks 选项打开
null
只能赋值给 Null类型undefined
只能赋值给 Undefined类型 和 Void类型
// 合法let n: null = null;let u: undefined = undefined;let v: void = undefined;// 不合法let v: void = null;
strictNullChecks 选项关闭
null
和undefined
可以赋值给任意类型
// 合法let v1: undefined = null;let v2: void = undefined;let v3: null = undefined;let x: number = null;let y: string = undefined;
Never类型
Never类型关键字为 never
。Never类型代表不可能存在的类型,Never类型常常伴随着错误和异常出现(因为错误和异常可以提前终止,让值无法到达):
// 抛出异常,永远无法返回function error(message: string): never { throw new Error(message);}// 死循环,永远无法返回function infiniteLoop(): never { while (true) { }}// 声明交叉类型变量:既是布尔类型也是数字类型let n: boolean & number;// 以下赋值皆错误,不可能存在一个值既是布尔类型也是数字类型n = 1; // error TS2322: Type '1' is not assignable to type 'never'n = null; // error TS2322: Type 'null' is not assignable to type 'never'n = false; // error TS2322: Type 'false' is not assignable to type 'never'
上面示例中的交叉类型变量赋值,根据错误提示可知,会被编译器推导为 never
类型:
// 声明不可能存在的交叉类型let n: boolean & number;// 等价于let n: never;
任意值类型
任意值的类型关键字为 any
,任意值就是可以被当做任意类型使用的值。任意值具有动态类型特性:
// 声明为任意类型let notSure: any = 4;// 赋值为字符串类型notSure = "hello world";// 赋值为布尔类型notSure = false;
一个值,如果满足以下任何一个条件,会被判定为任意类型:
1、显式指定类型 any
// 显式指定变量类型,x为anylet x: any;// 显式指定变量类型,y为anylet y: any = 10;
2、未显式指定类型,且没有初始化或默认值
// 未指定类型,且未初始化。x为anylet x;// 未指定类型,但初始化了。y被自动推导为numberlet y = 10;// 未指定类型,且没有默认值。参数x为anyfunction f(x) { console.log(x);}
尽量不要使用any类型,any类型表现上跟JavaScript的类型一样弱。TypeScript最大的优势在于类型化带来的强约束作用,他可以让你更早的发现错误,并带来更高的可维护性
- 作者:joye
- 出处:https://github.com/joye61