当前位置: 首页 > article >正文

TS系列(2):类型声明、类型推断和类型总览


你好,我是沐爸,欢迎点赞、收藏、评论和关注。

昨天分享了  TS系列(1):TS是什么?如何使用?今天咱们接着上回继续唠。

四、类型声明

使用 : 来对变量或函数形参,进行类型声明:

let a: string // 变量a只能存储字符串
let b: number // 变量b只能存储数值
let c: boolean // 变量c只能存储布尔值

a = 'hello'
a = 100 // Type 'number' is not assignable to type 'string'

b = 123
b = 'hello' // Type 'string' is not assignable to type 'number'

c = true
c = 123 // Type 'number' is not assignable to type 'boolean'

// 参数x和y必须是数字,函数返回值也必须是数字
function sum(x: number, y: number):number {
    return x + y
}

sum(1, 2)
sum(1, '2') // Argument of type 'string' is not assignable to parameter of type 'number'
sum(1, 2, 3) // Expected 2 arguments, but got 3
sum(1) // Expected 2 arguments, but got 1

: 后也可以写字面量类型,不过实际开发中用的不多

let a: 'hello' // a的值只能是字符串'hello'
let b: 100 // b的值只能是数字100

a = 'hello world' // Type '"hello world"' is not assignable to type '"hello"'
b = 200 // Type '200' is not assignable to type '100'

五、类型推断

TS 会根据我们的代码,进行类型推导,例如下面代码中的变量 a ,只能存储数字

let a = 100 // TypeScript 会推断出变量 a 的类型是数字
a = false // Type 'boolean' is not assignable to type 'number'

let obj = {
    name: 'xiaoming',
    age: 6
}
obj.name = null // Type 'null' is not assignable to type 'string'
obj.age = '8' // Type 'string' is not assignable to type 'number'

但要注意,类型推断不是万能的,面对复杂类型时推断容易出问题,所以最好明确类型声明!

六、类型总览

JavaScript 中的数据类型

  1. string
  2. number
  3. boolean
  4. null
  5. undefined
  6. bigint
  7. symbol
  8. object

备注:其中 object 包含:Array、Function、Date、Error 等......

TypeScript 中的数据类型

  1. 上述所有 JavaScript 类型
  2. 六个新类型
    • any
    • unknown
    • never
    • void
    • tuple
    • enum
  1. 两个用于自定义类型的方式:
    • type
    • interface

注意点

在 JavaScript 中的这些内置构造函数:NumberStringBoolean,它们用于创建对应的包装类型,在日常开发时很少使用,在 TypeScript 中也是同理,所以在 TypeScript 中进行类型声明时,通常都是用小写的 numberstringboolean

例如下面的代码:

let str1: string
str1 = 'hello'
str1 = new String('hello world') // Type 'String' is not assignable to type 'string'. 'string' is a primitive, but 'String' is a wrapper object. Prefer using 'string' when possible.

let str2: String
str2 = 'hello' // 不会报错
str2 = new String('hello world') // 不会报错

1.原始类型 VS 包装类型

  • 原始类型:如 numberstringboolean,在 JavaScript 中是简单数据类型,它们在内存中占用空间少,处理速度快。
  • 包装类型:如 Number 对象、String对象、Boolean对象,是复杂类型,在内存中占用更多空间,在日常开发中很少由开发人员创建包装对象。

2.自动装箱:JavaScript 在必要时会自动将原始类型包装成对象,以便调用方法或访问属性。

自动装箱示例代码:

// 原始类型字符串
let str = 'hello'

// 当访问 str.length 时,JavaScript 引擎做了以下工作:
let size = (function() {
    // 1.自动装箱:创建一个临时的 String 对象包装原始字符串
    let temStringObject = new String(str)

    // 2.访问 String 对象的 length 属性
    let lengthValue = temStringObject.length

    // 3.销毁临时对象,返回长度值
    return lengthValue
})()

console.log(size) // 5

好了,分享结束,谢谢点赞,下期再见。


http://www.kler.cn/a/320208.html

相关文章:

  • wordpress独立站首页调用产品的三种方法
  • Linux进阶:软件安装、网络操作、端口、进程等
  • C++---类型转换
  • [数组二分查找] 0209. 长度最小的子数组
  • unity 打包WebGL打开后Input无法输入中文,在手机端无法调用输入法(使用WebGLInput)
  • 商业iOS端路由架构演进
  • Redis|基础学习
  • 便捷将屏幕投射到安卓/iOS设备-屏幕投射到安卓/iOS设备,Windows/Mac电脑或智能电视上-供大家学习研究参考
  • Android 布局RecyclerView布局介绍
  • 【数据结构】剖析二叉树(Binary Tree)
  • 低代码BPA(业务流程自动化)技术探讨
  • hive窗口函数实现组内求和、累加、排序、计数
  • Flutter路由
  • react crash course 2024(3) jsx语法及组件
  • mysql数据库:超键、候选键、主键与外键
  • 百度营销转化追踪(网页JS布码)
  • [Oracle] ORA-04036: 实例使用的 PGA 内存超出 PGA_AGGREGATE_LIMIT
  • [AIGC实战]5分钟使用EAS一键部署MLLM多模态大语言模型应用
  • 如何去编写一个好的单元测试,通义灵码是如何快速生成单元测试?
  • 免费的高质量、美观的甘特图模板
  • 求二叉树的高度(递归和非递归)
  • 【排序算法】选择排序、堆排序
  • 【数据结构之线性表】有序表的合并(链表篇)
  • 论文笔记:基于共注意网络的多模态假新闻检测
  • 基于组网分割的超大规模设计 FPGA 原型验证解决方案
  • power bi制作各季度收入累加柱状图——日期表、calculate、datesytd