共计 字 • 阅读约 min

任意类型

任意类型(any)用来表示允许赋值为任意数据类型

一个普通类型,在赋值过程中改变类型是不被允许的

let name:string = '张三'

name = 123

// ERROE:
// Type 'string' is not assignable to type 'number'.

如果使用 any 类型,这个操作就是被允许的

let name:any = '张三'

name = 123

未申明类型的变量,默认也会被识别为任意类型

let name;
name = '张三'
name = 'lisi'

等价于

let name:any;
name = '张三'
name = 'lisi'

any 数据类型访问任意属性都是被允许的

any 数据类型是有弊端的,首先不能快速知道类型,其次又回到了最初的起点(Javascript),everything is any

类型推论

如果没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型。

例如下面这个例子:虽然没有指定类型,但是编译也会报错,

let name = '张三';  
// 等同于 let name:string = '张三'
name = 7;

// ERROR
// Type 'string' is not assignable to type 'number'.

如果定义的时候没有赋值,不管之后有没有赋值,都会被推断成 any 类型而完全不被类型检查

let name;
name = '张三'
name = 123

联合类型

联合类型(Union Types)表示取值可以为多种类型中的一种。

let name: string | number // 就表示name既可以是字符串,也可以是数字
name = '张三'
name = 123

访问联合类型的属性或方法,只能访问此联合类型的 所有类型里共有的属性或方法

let name: string | number
// 非共有属性
name.length
// length 属性只有string类型有,number没有

// ERROR
// Property 'length' does not exist on type 'number'.


// 共有属性
name.toString()


文章更新于: 2021-4-16 0:17:8