/ typescript

TS - 基础类型

类型系统

typeScript 中的类型在 javaScript 中的对应关系

基础类型

  • number: 数字
  • string: 字符串
  • boolean: 布尔值
  • null: null
  • undefined: undefined

特殊值

  • any: 任意值
  • void: 空值,比如函数没有返回值
  • never: 永不存在的值的类型,返回 Error 的函数
  • object: 表示对象

复合类型

  • Array: 一个包含 T 类型的数组,T 可以是具体的类型

TypeScript 像 JavaScript 一样可以操作数组元素。

let arr: Array<number> = [1, 2, 3, 4]

数组类型的另一种写法: number[]

  • [string, number]: 元组,规定数组特定位置的类型

元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同。

let x: [string, number];
x = ['hello', 10]; // OK
x = [10, 'hello']; // Error

当访问过界元素时,会用联合类型代替

x[3] = 'world' // OK 联合类型为 string|number 
x[3] = true    // Error boolean 不在联合类型中
  • enum: 枚举,规定变量范围

enum 类型是对 JavaScript 标准数据类型的一个补充。 像 C# 等其它语言一样,使用枚举类型可以为一组数值赋予友好的名字。

enum Color {Red, Green, Blue}
let c: Color = Color.Green     // OK
c = 'red'                      // Error

类型断言

有时候你会遇到这样的情况,你会比 TypeScript 更了解某个值的详细信息。通常这会发生在你清楚地知道一个实体具有比它现有类型更确切的类型。

有两种方式强制规定变量的类型

  1. 尖括号法,有点像泛型

    let someValue: any = "this is a string";
    let strLength: number = (<string>someValue).length;
    
  2. as 语法

    let someValue: any = "this is a string";
    let strLength: number = (someValue as string).length
    

感觉上,第一种容易和泛型弄混,但是第二种又表示不明确,会认为是正常的语句,而不存在规定类型,看个人喜好了。