TypeScript 入门:作用域、Object 类型

本文探讨了TypeScript中的作用域问题,指出如何利用ES6模块化解决同名变量冲突。接着讲解了Object类型,包括数组和元组的定义。最后介绍枚举类型,阐述其在状态标识中的应用以及编译后的效果,强调了常量枚举的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上两篇内容:

我们为什么要学习 TypeScript?

TypeScript 入门应用:类型系统和配置文件


作用域问题


即便不同文件中,有相同变量名字,也会出现变量名同名的错误。可以使用立即执行函数,包装作用域。

(
  function () {
    consta: number =66;
    constb: string ='bbb';
  }
)()

立即执行函数并不方便使用,这里我们使用 ES6 中的模块化是以文件为单位的,在代码的末尾,使用 export{} 来标注模块化代码文件,模块与模块之间的作用域是相互独立的。

const a: number =66;
const b: string ='bbb';


export{}

真实开发场景下,一般都是使用模块化语法规则导入导出的。

Object 类型

TS 中的 Object 类型,包含了数组、函数和对象。

const f1:object =function(){}
const a1:object = []
const o1:object = {}


export {}

对象的具体类型限制,标注的对象要具体属性名字及类型,值必须一一对应,不能多也不能少。

// 具体标注对象类型,标注的对象要具体属性名字及类型,值必须一一对应
const o2:{n1:number,s2:string} = {n1:666,s2:'xilinglaoshi'}

当然,更专业的还是使用接口的方式。

数组


普通数组的定义

数组的定义有两种方式,使用泛型及普通标注。

// xx:类型<元素类型> 
const arr:Array<number>= [2,3,66]// 纯数字类型数组
const arr2:number[] = [66,77,88]
元组类型

明确元素数量及元素类型的数组。

// 元组类型(多类型的数组)
const tuple:[number,string] = [66,'xiling']


// 当作普通数组操作获取
const age = tuple[0]
const username = tuple[1]
// 解构赋值
const [ages,names] = tuple

枚举类型

枚举类型在其他编程语言中很是常见,但是 JS 中却没有,枚举类型能做什么什么呢?

先看一个小案例:

const post = {
  title:'一块手表的逆袭',
  content:'曾经有一块非常廉价的手表,出生在罗马帝国……',
  status:0//文章状态 2发表,1未发表, 0草稿
}

状态标识 status 属性,容易混乱更容易忘记,还会乱入其他值,以往我们会使用一个对象标注状态,比如:

const PostStatus = {
  Draft:0
  Unpublished:1,
  Published:2
}


const post = {
  title:'一块手表的逆袭',
  content:'曾经有一块非常廉价的手表,出生在罗马帝国……',
  status: PostStatus.Published文章状态 2发表,1未发表, 0草稿
}

而如果使用枚举类型,我们就可以这样了:

// 定义枚举类型的数据,
enum PostStatus {
  Draft=0,
  Unpublished=1,
  Published=2
}


const post = {
  title:'一块手表的逆袭',
  content:'曾经有一块非常廉价的手表,出生在罗马帝国……',
  // 枚举类型的使用与对象一样
  status: PostStatus.Published
}

看着好像并没有什么区别,其实枚举最大的作用在于可以递增,如果不赋值,则默认从零,如果给第一个赋值,则从第一个数值开始累加。

// 定义枚举类型的数据,
enum PostStatus {
  Draft=6,//赋值,则累加,不赋值则从 0 开始
  Unpublished,
  Published
}


const post = {
  title:'一块手表的逆袭',
  content:'曾经有一块非常廉价的手表,出生在罗马帝国……',
  // 枚举类型的使用与对象一样
  status: PostStatus.Published
}


console.log(post)

当然,枚举类型的值,也可以是字符串,但是字符串是无法累加的,因此,极为少见,这里就不介绍了。

我们可以进行编译,然后查看结果。我们能够发现,是一个双向的键值对对象,就是可以通过键获取值,也可以通过值获取键,编译后就能看到,无非就是将表达式作为键存储起来而已。这样做,我们就可以在 ts 中,通过下标的方式,获取枚举的名称了。

如果我们确认在代码中,不会使用使用索引获取枚举名称,那我建议大家使用常量枚举,编译过后我们能在 JS 代码中看到,枚举代码已经被移除了,代码中直接使用了具体的值,并且会使用注释标注类型名称。

// 定义枚举类型的数据,
constenum PostStatus {
  Draft=6,//赋值,则累加,不赋值则从 0 开始
  Unpublished,
  Published
}


const post = {
  title:'一块手表的逆袭',
  content:'曾经有一块非常廉价的手表,出生在罗马帝国……',
  // 枚举类型的使用与对象一样
  status: PostStatus.Published
}


console.log(post)

未完待续...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值