主要有以下数据类型:

  • 数字类型(number)
  • 字符串类型(string)
  • 数组类型(array)
  • 布尔类型(boolean)
  • 元组类型(tuple)
  • 枚举类型(enum)
  • 任意类型(any)
  • void(无类型)
  • null 和undefined
  • never
  • object

    数字类型(number)

    同JS,所有的数字都是浮点数(支持十进制和十六进制,还有ECMAScript 2015中引入的二进制和八进制字面量)
    1. let x: number = 6

    字符串类型(string)

    使用单双引号都行
    1. let name: string = "xxx"
    2. name = 'yyy' // 可行
    还可以使用模板字符串(定义多行文本和内嵌表达式)使用反引号````包围,${ xxx }形式嵌入
    1. let xxx: string = "hello"
    2. let yyy: string = `${xxx} world`
    3. let zzz: string = xxx + "world" // 等价于上面一句

    数组类型(array)

    两种方式定义

    1. 元素类型后面加[]

    1. let list: number[] = [1,2,3]

    2.使用数组泛型,Array<元素类型>

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

    布尔类型(boolean)

    true/false
    1. let x: boolean = false | true

    元组类型(tuple)

    元组类型允许表示一个已知元素数量和类型的数组,各元素的类型不必相同
    1. let x: [string,number]
    2. x = ["hello",1] // OK
    3. x = ["hello","world"] // Error
    联合类型:
    1. let x: string | number
    2. // x为 string 或者 number 都是 OK 的

    枚举类型(enum)

    enum类型是对JavaScript标准数据类型的一个补充
    1. enum Status {success = 1, fail = -1} // 可以直接赋值,也可以不赋值
    2. let a: Status = a.success // 1

    任意类型(any)

    一般是为了防止报错(处理暂时不知道具体类型的数据)
    1. let x: any = "hello world"
    2. let y: any[] = [1,"yyy",true] // OK

    void(不表示任何类型)

    一般用在函数没有返回值时,其返回值的类型
    只能为它赋予undefinednull
    1. let x: void = undefined
    2. // 普通函数
    3. function x(): void {}
    4. // 返回值为number的函数
    5. function xx(x:number,y: number): number {return x+y}
    6. // 箭头函数声明类型
    7. let yyy: (x:string)=>void = (x) => {console.log(x)}

    null 和undefined

    默认情况下null和undefined是所有类型的子类型,用到的情况可能是联合类型
    1. let x: number | undefined // 表示x可以不存在
    2. let x?: number // 等价于上面的,?表示可以不存在

    never

  1. never类型表示的是那些永不存在的值的类型
    1. never类型是那些总是会抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值类型;
    2. 变量也可能是never类型,当它们被永不为真的类型保护所约束时。
  2. never类型是任何类型的子类型
  3. 没有类型可以赋值给neverany也不行(只有never可以赋值给never) ```typescript // 返回never的函数必须存在无法到达的终点 function error(message: string): never{ throw new Error(message) }

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

// 推断的返回值类型为never function fail() { return error(“failed”); }

  1. <a name="jB5ms"></a>
  2. ## object(非原始类型)
  3. 除`number,string,boolean,symbol,null或undefined`之外的类型
  4. ```typescript
  5. function fun(x: object | null): void
  6. fun({xxx: "xxx"}) // OK
  7. fun(null) // OK
  8. fun(true) // Error

类型断言

两种形式

1.尖括号语法

  1. let foo: any
  2. let xxx = <string>foo // 此时foo类型为string

2.as 语法(在JSX语法里只能使用这种,尖括号可能会造成歧义)

  1. let xxx = foo as string
  2. //双重类型断言
  3. //'Event' 和 'HTMLElement' 中的任何一个都不能赋值给另外一个,所以先将其断言为any
  4. function handler(event: Event) {
  5. const element = (event as any) as HTMLElement; // ok
  6. }

参考资料:
TypeScript文档