『TypeScript』基本数据类型

August 11,2019
0
TypeScript

Boolean

布尔值是最基本也是最简单的数据类型,它只有两种值:true/false

let isDone: boolean = false

Number

JS 中的所有数值都是浮点值,TS 也一样,在 TS 中数值的类型为 number,TS 同时也支持二进制等其它进制形式表示的数值:

let decimal: number = 6
let binary: number = 0b1010
let hex: number = 0xf00d

String

字符串类型跟 JS 并无二致:

let str: string = 'Hello TypeScript!'

Array

TS 中定义数组有两种形式:

// 1. 在类型关键词后跟 **[]**
let list: number[] = [1, 2, 3]

// 2. 泛型
let list: Array<number> = [1, 2, 3]

Tuple

JS 没有元组这种数据类型,在我了解的语言中,Python 有这种数据类型。它有两个特点,确定的元素个数,明确的数据类型:

let x: [string, number] = ['1', 2]

x = [1, '2'] // TypeError

console.log(x[3]) // Error

Enum

枚举是从 C# 和 Java 中借鉴的数据类型,它可以用来为一组数值集合赋予更加友好的名称:

enum Color {
  RED,
  GREEN,
  BLUE,
}

let color: Color = Color.RED

默认情况下,枚举成员的数值是从 0 开始,依次递增。或者,也可以手动指定:

enum Color {
  RED = 1,
  GREEN, // 2
  BLUE, // 3
}

如果你知道枚举成员的值,那么通过它可以反向查找到其对应的枚举成员名称:

enum Color {
  RED,
  GREEN,
  BLUE,
}

console.log(Color[2]) // 'BLUE'

Any

Any 顾名思义,也就是『随便,都可以』:

let notSure: any = 1
notSure = 'any'
notSure = false

Void

void 有点像 any 的对立面:没有任何类型。可以将其视为没有返回值类型函数的返回值类型:

function warn(): void {
  console.warn('Warning')
}

Null & Undefined

TS 中 nullundefined 都有对应的类型名称 nullundefined

let u: undefined = undefined
let n: null = null

nullundefined 类型是其他所有类型的子类型,也就是说,你可以把前两者赋值给其它任何类型。如果配置了 --strictNullChecks 选项,nullundefined 将只能赋值给 any 和它们各自对应的类型。

Never

never 类型表示值的类型从不出现。例如,当 never 作为函数的返回值类型时,该函数总是会抛出异常或者永远不返回。

never 类型可以是每种类型的子类型,可以分配给每种类型;但是没有类型是 never 类型的子类型。

function error(message: string): never {
  throw new Error(message)
}

function fail(): never {
  return error('Failed')
}

function infiniteLoop(): never {
  while (true) {}
}

Object

object 表示非原始类型,即除了 numberstringbooleansymbolnullundefined 之外的其它类型。

类型断言

类型断言类似其它语言中的类型转换,就像告诉编译器:『相信我,我知道我在做什么』。TS 中的类型断言有两种形式:

// 1. 尖括号语法
let value: any = 'Hello TS'
let valLength: number = (<string>value).length // 8

// 2. as 语法
let value: any = 'Hello TS'
let valLength: number = (value as string).length // 8

如果要在 JSX 中使用类型断言,只允许使用 as 语法。


商业转载请联系站长获得授权,非商业转载请注明本文出处及文章链接,您可以自由地在任何媒体以任何形式复制和分发作品,也可以修改和创作,但是分发衍生作品时必须采用相同的许可协议。
本文采用 CC BY-NC-SA 4.0 - 非商业性使用 - 相同方式共享 4.0 国际进行许可。