Skip to content
大纲

基本类型

类型列表

数据类型说明示例
undefined值为 undefinedlet TBD: undefined
null值为 nulllet nothing: null = null
void值为 undefinednulllet empty: void; empty=null
boolean值为 truefalselet boolean: boolean = true
number值为 数字let number: number = 7
string值为 字符串let string: string = 'lazyneko'
symbol值为 symbolconst 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}

说明:

  • 默认情况下 nullundefined 类型是所有类型的子类型,即可以把 nullundefined 赋值给任意变量
  • 在指定 --strictNullChecks 标记时,undefined, null 只能赋值给 void 类型和它们自身类型
  • --strictNullChecks 模式下,若想给变量传递 undefinednull 值可以使用联合类型,如 let str: string|null = null;, 可选属性和可选参数会被自动加上 | undefined

voidneverany

  • void 用于描述一个空值,通常没有什么用
  • never 用于描述一个不应存在的值,如 异常、死循环等,通常没什么用,应当不属于基本类型,置于上表方便整理
  • any 类型可以用来描述任意类型,不属于基本类型,置于上表以方便整理

枚举

typescript 中添加了枚举类型用于限定变量取值范围:

  • 基本介绍
    • 枚举类型定义了一组值,用于限定变量的取值范围
    • typescript 支持值为数字和字符串类型的枚举
  • 枚举类型:依据枚举成员的数据类型分为以下几种枚举类型
    • 数字枚举
    • 字符串枚举
    • 异构枚举
  • 枚举成员:每个枚举成员都代表一个值,可以是常量或计算出来的值
    • 数字枚举成员可以使用默认规则生成值、设置指定数值或可计算的结果合法的表达式
    • 字符串枚举成员必须设置初始化值且不可使用计算值
  • 联合枚举:当所有枚举成员都拥有字面量枚举值时,枚举成员可以作为类型使用
  • 运行时枚举:声明枚举类型将创建一个同名的对象
    • 可直接作为对象使用
    • 数字枚举将创建键值对互相映射的对象
    • 字符串枚举将创建同键值对的对象
  • const枚举:使用 const 枚举不会创建同名的对象
    • 编译后没有额外的开销,不可作为对象使用
    • 成员的值只能是常量或常量表达式
    • 在使用枚举成员的地方会被当做值处理
  • 使用 declare 声明外部枚举,用来描述一个已存在的枚举类型

各种枚举类型的特点:

  • 数字枚举
    • 未指定成员的值为前一个成员的值加 1
    • 第一个成员的值默认为 0
    • 成员可以使用计算结果非 NaNInfinity 的表达式
    • 如果成员值是一个无法及时计算(如函数的返回值,变量之间的运算),则无法使用自增
    • 数字枚举成员具有反向映射,可以通过枚举值获取枚举名字
  • 字符串枚举
    • 没有自增行为
    • 需要给每个枚举成员指定值
    • 含字符串值成员的枚举中不允许使用计算值
  • 异构枚举
    • 枚举成员混合了数字类型和字符串类型
    • 不建议使用

示例

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