基本类型
类型列表
| 数据类型 | 说明 | 示例 |
|---|---|---|
undefined | 值为 undefined | let TBD: undefined |
null | 值为 null | let nothing: null = null |
void | 值为 undefined 或 null | let empty: void; empty=null |
boolean | 值为 true 或 false | let boolean: boolean = true |
number | 值为 数字 | let number: number = 7 |
string | 值为 字符串 | let string: string = 'lazyneko' |
symbol | 值为 symbol | const symbol: symbol = Symbol(); |
enum | 值为 枚举,需要先定义 | enum DOA = { dead, alive }; let dead: DOA = DOA.dead |
never | 用于描述永不存在的值 | const error = (): never => { throw new Error('7') } |
any | 值为任意类型 | let any: any; any = 7; any = {seven: 7} |
说明:
- 默认情况下
null和undefined类型是所有类型的子类型,即可以把null或undefined赋值给任意变量 - 在指定
--strictNullChecks标记时,undefined,null只能赋值给void类型和它们自身类型 - 在
--strictNullChecks模式下,若想给变量传递undefined或null值可以使用联合类型,如let str: string|null = null;, 可选属性和可选参数会被自动加上| undefined
void、never、any
void用于描述一个空值,通常没有什么用never用于描述一个不应存在的值,如 异常、死循环等,通常没什么用,应当不属于基本类型,置于上表方便整理any类型可以用来描述任意类型,不属于基本类型,置于上表以方便整理
枚举
typescript 中添加了枚举类型用于限定变量取值范围:
- 基本介绍
- 枚举类型定义了一组值,用于限定变量的取值范围
- typescript 支持值为数字和字符串类型的枚举
- 枚举类型:依据枚举成员的数据类型分为以下几种枚举类型
- 数字枚举
- 字符串枚举
- 异构枚举
- 枚举成员:每个枚举成员都代表一个值,可以是常量或计算出来的值
- 数字枚举成员可以使用默认规则生成值、设置指定数值或可计算的结果合法的表达式
- 字符串枚举成员必须设置初始化值且不可使用计算值
- 联合枚举:当所有枚举成员都拥有字面量枚举值时,枚举成员可以作为类型使用
- 运行时枚举:声明枚举类型将创建一个同名的对象
- 可直接作为对象使用
- 数字枚举将创建键值对互相映射的对象
- 字符串枚举将创建同键值对的对象
const枚举:使用const枚举不会创建同名的对象- 编译后没有额外的开销,不可作为对象使用
- 成员的值只能是常量或常量表达式
- 在使用枚举成员的地方会被当做值处理
- 使用
declare声明外部枚举,用来描述一个已存在的枚举类型- 对于非常数的外部枚举而言,没有初始化方法时被当做需要经过计算的(可以看这里的解释)
各种枚举类型的特点:
- 数字枚举
- 未指定成员的值为前一个成员的值加 1
- 第一个成员的值默认为 0
- 成员可以使用计算结果非
NaN和Infinity的表达式 - 如果成员值是一个无法及时计算(如函数的返回值,变量之间的运算),则无法使用自增
- 数字枚举成员具有反向映射,可以通过枚举值获取枚举名字
- 字符串枚举
- 没有自增行为
- 需要给每个枚举成员指定值
- 含字符串值成员的枚举中不允许使用计算值
- 异构枚举
- 枚举成员混合了数字类型和字符串类型
- 不建议使用
示例
ts
enum Version {
init = 0.1,
first, //自增为 1.1
lts = 2.5,
next, //自增为 3.5
}
const enum State {
Stable = "stable",
Abandoned = "abandoned",
}
interface Util {
state: State.Stable; //作为类型使用
name: string;
}
function showKV(obj: Object) {
Object.entries(obj).forEach(val => {
console.log(`${val[0]}: ${val[1]}`);
});
}
// showKV(State) //"const" 枚举仅可在属性、索引访问表达式、导入声明的右侧、导出分配或类型查询中使用。
showKV(Version);
/**
* 数字枚举具有反向映射,会生成键值对交互的对象
* 输出如下 >
* init: 0.1
* 0.1: init
* first: 1.1
* 1.1: first
* lts: 2.5
* 2.5: lts
* next: 3.5
* 3.5: next
*/
let init = Version.init;
let stable = State.Stable;
console.log(Version[init]); //init
console.log(stable); //stable