四、类型声明
1、 使⽤ : 来对变量或函数形参,进⾏类型声明
string 声明类型时首字母不能大写
类型声明之后填写非该类型code会报错
函数demo定义传参为x,y时则不能多传,和少传,否则报错
在 : 后也可以写字⾯量类型,不过实际开发中⽤的不多(了解)
这里的b:类型定义为100 则后续使用时候只能为100类型
五,类型推断
TS 会根据我们的代码,进⾏类型推导,例如下⾯代码中的变量 d ,只能存储数字
但要注意,类型推断不是万能的,⾯对复杂类型时推断容易出问题,所以尽量还是明确的编写类 型声明!
六、类型总览
JavaScript 中的数据类型
① string ② number ③ boolean ④ null ⑤ undefined ⑥ bigint ⑦ symbol ⑧ object 备注:其中 object 包含: Array 、 Function 、 Date 、 Error 等......
TypeScript 中的数据类型,(学java的同学,看这些就跟玩似的)我为抓娃添砖JAVA
- 上述所有 JavaScript 类型
- 六个新类型: ① any ② unknown ③ never ④ void ⑤ tuple ⑥ enum
- 两个⽤于⾃定义类型的⽅式: ① type ② interface
注意点:大小写声明
在 JavaScript 中的这些内置构造函数: Number 、 String 、 Boolean ,⽤于 创建对应的包装对象, 在⽇常开发时很少使⽤,在 TypeScript 中也是同理,所以 在 TypeScript 中进⾏类型声明时,通常都是⽤⼩写的 number 、 string 、 bo olean
如代码所示:
- 原始类型 VS 包装对象
原始类型:如 number 、 string 、 boolean ,在 JavaScript 中是简单数据 类型,它们在内存中占⽤空间少,处理速度快。
包装对象:如 Number 对象、 String 对象、 Boolean 对象,是复杂类型,在 内存中占⽤更多空间,在⽇常开发时很少由开发⼈员⾃⼰创建包装对象。
- ⾃动装箱:JavaScript 在必要时会⾃动将原始类型包装成对象,以便调⽤⽅法或访 问属性
底层自动装箱代码解释:
七、常⽤类型与语法
1. any
any 的含义是:任意类型,⼀旦将变量类型限制为 any ,那就意味着放弃了对该变量的类型 检查。
注意点: any 类型的变量,可以赋值给任意类型的变量
2. unknown
unknown 的含义是:未知类型,适⽤于:起初不确定数据的具体类型,要后期才能确定
2.1 unknown 可以理解为⼀个类型安全的 any 。
2.2 unknown 会强制开发者在使⽤之前进⾏类型检查,从⽽提供更强的类型安全性
2.3 读取 any 类型数据的任何属性都不会报错,⽽ unknown 正好与之相反
3. never 几乎不用 很少
never 的含义是:任何值都不是,即:不能有值,例如 undefined 、 null 、 '' 、 0 都不⾏
3.1 ⼏乎不⽤ never 去直接限制变量,因为没有意义,例如
3.2 never ⼀般是 TypeScript 主动推断出来的,例如:
3.3 never 也可⽤于限制函数的返回值
4. void 用于限制函数返回值
void 的含义是空,即:函数不返回任何值,调⽤者也不应依赖其返回值进⾏任何操作!
4.1 void 通常⽤于函数返回值声明
如下调用为正确,但是类型为never时会报错
void,举个例子,你问同学午饭吃啥?他回答never,意思是它不需要吃饭能活着,而void的意思是可以不吃
never
注意:编码者没有编写 return 指定函数返回值,所以 logMessage 函数是没有显式返回值的,但会有⼀个隐式返回值 ,是 undefined ,虽然函数返回类型为 void ,但也是可以接受 undefined 的,简单记: undefined 是 void 可以接受的⼀种“空”。
4.2 以下写法均符合规范
4.3 那限制函数返回值时,是不是 undefined 和 void 就没区别呢?— 有区别。因为还有这句话 :【返回值类型为 void 的函数,调⽤者不应依赖其返回值进⾏任何操作!】对⽐下⾯两段代码:
总结 : void不等于undefined,但是void包含undefined,undefined是void 的一种具体体现