logo
Published on

TypeScript 从入门到放弃之基础类型

基础类型 - 官方手册

介绍 TypeScript 的基础类型定义与相关注意事项。

布尔

boolean

数字

number

JavaScript 中所有数字都是浮点类型

字符串

string

数组

Array[number] / number[]

元组

类似 [string, number] 这样的类型定义

枚举

enum Color {Red, Green, Blue}

enum Color {
  Red = 1,
  Green,
  Blue,
}
let colorName: string = Color[2]

console.log(colorName) // Displays 'Green' as its value is 2 above

Any

any

Void

void

通常用来标记函数无返回值

let unusable: void = undefined

Null and Undefined

// Not much else we can assign to these variables!
let u: undefined = undefined
let n: null = null

默认情况下,nullundefined 是其他所有类型的子类型。这也就意味着可以为 number 类型的变量赋值 nullundefined

可以通过 --strictNullChecks 标记,使得 nullundefined 只能对 any 和他们自身赋值(一个特殊情况就是,仍然可以为 undefined 赋值 void )。这样可以避免很多常见错误。如果需要传递的类型包含 stringnullundefined ,可以使用联合类型定义 string | null | undefined 。后续会详细讲解联合类型。

官方推荐尽可能开启 --strictNullChecks ,但是手册还是以默认关闭的方式讲解。

Never

never 表示这个值不会出现。例如,当函数返回值总是异常或者没有返回值(死循环)时,函数返回值类型为 never ;变量也可能为 never 类型

Variables also acquire the type never when narrowed by any type guards that can never be true.

虽然这句话没看懂 _(:3J∠)_

Object

object 代表变量为非原始类型,即非 numberstringbooleansymbolnull 或者 undefined

With object type, APIs like Object.create can be better represented. For example:

declare function create(o: object | null): void

create({ prop: 0 }) // OK
create(null) // OK

create(42) // Error
create('string') // Error
create(false) // Error
create(undefined) // Error

大概是在初始化类对象的时候会用到?但是这样的话可以通过定义 interface 或者 type 实现的,所以暂时搞不清这个有何具体应用场景。

类型断言

有些时候,开发者会比编辑器更清楚变量类型,这样就有了类型断言。类型断言让编辑器相信我们所作所为。这和其他语言的类型转换相似,但是不会执行一些特殊的检查或者重构数据结构。也就不会产生任何运行时的影响,仅作为编译时类型检查。

类型检查有两种形式,一是“尖括号”语法:

let someValue: any = 'this is a string'

let strLength: number = (<string>someValue).length

另一种是 as 语法。

let someValue: any = 'this is a string'

let strLength: number = (someValue as string).length

当结合 React 开发的时候,只能使用 as 语法。