TS项目开发过程中减少重复代码(1)

很明显,相对于 Person 接口来说,PersonWithBirthDate 接口只是多了一个 birth 属性,其他的属性跟 Person 接口是一样的。那么如何避免出现例子中的重复代码呢?要解决这个问题,可以利用 extends 关键字:

interface Person {

firstName: string;

lastName: string;

}

interface PersonWithBirthDate extends Person {

birth: Date;

}

当然除了使用 extends 关键字之外,也可以使用交叉运算符(&):

type PersonWithBirthDate = Person & { birth: Date };

下面我们来继续看另一个例子,假设你已经定义 State(代表整个应用程序的状态)和 TopNavState(只代表部分应用程序的状态)两个接口:

interface State {

userId: string;

pageTitle: string;

recentFiles: string[];

pageContents: string;

}

interface TopNavState {

userId: string;

pageTitle: string;

recentFiles: string[];

}

上述的 TopNavState 接口相比 State 接口只是缺少了 pageContents 属性,但我们却重复声明其他三个相同的属性。为了减少重复代码,我们可以这样做:

type TopNavState = {

userId: State[‘userId’];

pageTitle: State[‘pageTitle’];

recentFiles: State[‘recentFiles’];

};

在上面代码中,我们通过成员访问的语法来提取对象中属性的类型,从而避免重复定义接口中相关属性的类型。但这并没有解决本质的问题,我们还有很大的优化空间。针对这个问题,我们可以利用映射类型来进一步做优化:

type TopNavState = {

};

鼠标悬停在 TopNavState 显示它的声明,实际上,这个定义与前一个定义完全相同。

通过映射类型优化后的代码,相比 TopNavState 接口最初的代码简洁了许多。那还有没有优化空间呢?其实是有的,我们可以利用 TypeScript 团队为我们开发者提供的工具类型,这里我们可以使用 Pick

type TopNavState = Pick<

State, ‘userId’ | ‘pageTitle’ | ‘recentFiles’

;

其实除了 Pick 之外,在实际开发过程我们还可以利用其他内置的工具类型来减少重复代码。这里我们再来介绍另一个比较常用的工具类型,即 Partial。以下是未使用 Partial 的例子:

interface Options {

width: number;

height: number;

color: string;

label: string;

}

interface OptionsUpdate {

width?: number;

height?: number;

color?: string;

label?: string;

}

class UIWidget {

constructor(init: Options) {

/* … */

}

update(options: OptionsUpdate) {

/* … */

}

}

在以上示例中,我们定义了 Options 和 OptionsUpdate 两个接口,它们分别用于描述 UIWidget 的初始化配置项和更新配置项。相比初始化配置项,更新配置项的所有属性都是可选的。

现在我们来开始优化上述的代码,我们先来看一下不使用 Partial 的情形:

type OptionsUpdate = {[k in keyof Options]?: Options[k]};

keyof 操作符接受一个类型,并返回一个由 key 组成的联合类型:

type OptionsKeys = keyof Options;

// Type is “width” | “height” | “color” | “label”

而 in 操作符是用来遍历枚举类型或联合类型。接着,我们来看一下使用 Partial 的情形:

class UIWidget {

constructor(init: Options) { /* … */ }

update(options: Partial) { /* … */ }

}

其实 Partial 并没有什么神奇的地方,我们来看一下它的定义:

// node_modules/typescript/lib/lib.es5.d.ts

/**

* Make all properties in T optional

*/

type Partial = {

[P in keyof T]?: T[P];

};

在以上代码中,首先通过 keyof T 拿到 T 的所有属性名,然后使用 in 进行遍历,将值赋给 P,最后通过 T[P] 取得相应的属性类型。中间的 ? 号,用于将所有属性变为可选。

有时候,你可能还会发现自己想要定义一个类型来匹配一个初始配置项的形状,比如:

const INIT_OPTIONS = {

width: 640,

height: 480,

color: “#00FF00”,

label: “VGA”,

};

interface Options {

width: number;

height: number;

color: string;

label: string;

}

对于 Options 接口来说,我们还可以使用 typeof 操作符来快速定义该接口类型:

type Options = typeof INIT_OPTIONS;

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

文章到这里就结束了,如果觉得对你有帮助可以点个赞哦,如果有需要前端校招面试题PDF完整版的朋友可以点击这里即可免费获取,包括答案解析。

链图片转存中…(img-E5RAQC3u-1713561438071)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

[外链图片转存中…(img-p0atYFZQ-1713561438071)]

最后

文章到这里就结束了,如果觉得对你有帮助可以点个赞哦,如果有需要前端校招面试题PDF完整版的朋友可以点击这里即可免费获取,包括答案解析。

[外链图片转存中…(img-2a2zc0v3-1713561438071)]

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue2.0是一款流行的JavaScript框架,用于构建用户界面。它具有良好的模块化和组件化特性,使开发人员能够更高效地开发可重用的前端代码。 而TypeScript(简称TS)则是一种由微软开发的开源编程语言,它是JavaScript的超集,为JavaScript添加了静态类型检查和更强大的开发工具支持。使用TS可以提高代码的可维护性和可读性。 后台模板是指在后端开发,为了快速搭建项目的界面和功能,开发人员可以使用现有的模板来减少重复劳动。后台模板通常包含了常见的界面组件和功能,如登录页面、仪表盘、表格、图表等,开发人员只需要在此基础上进行定制化开发即可。 基于Vue2.0和TS的后台模板提供了一种快速开发后台管理系统的解决方案。它结合了Vue2.0的响应式特性和组件化开发方式,以及TS的类型检查和开发工具支持,使开发人员能够高效地构建复杂的后台界面和功能。 使用Vue2.0和TS开发后台模板具有以下好处: 1. 更高的代码可维护性和可读性,TS的静态类型检查可以帮助开发人员及时发现潜在的 bug,提早进行修复。 2. 开发效率更高,Vue2.0的组件化开发方式和TS开发工具支持可以减少代码量和重复代码,提高开发效率。 3. 提供了丰富的UI组件和功能模块,如表格、图表、表单验证等,可以快速构建出功能完善的后台管理系统。 4. 可扩展性强,Vue2.0的模块化开发方式和TS的模块化功能可以方便地引入第三方库和插件,满足不同项目的需求。 总之,基于Vue2.0和TS的后台模板是一种理想的解决方案,它结合了Vue2.0和TS的优点,能够帮助开发人员快速构建高质量的后台管理系统。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值