「TypeScript」入门基础(二)🎯---联合类型与接口

简介: 「TypeScript」入门基础(二)🎯---联合类型与接口

前言🎉


  • 虽然之前有学过TypeScript但是平时业务上面都还是用JavaScript来开发导致逐渐对TypeScript生疏了。
  • 借此更文活动的机会再来一起学习一下TypeScript的知识吧。


TypeScrip联合类型🍉


  • TypeScrip联合类型可以理解为让变量的类型为定义的类型其中一种,每个类型通过|来分隔。
let someThing: string | number;
someThing = 'lwj';
someThing = 5201314;
复制代码
  • 如上的代码中someThing取的类型为string|number,这其中就用了联合类型,代表了someThing可以接受stringnumber类型的值,我们可以看到下面我们给变量分别赋值了string类型和number类型都不会报错,这就是联合类型。
  • 值得一提的是,虽然变量接受了联合类型可以取这两个类型的值,但TypeScrip实际上是'不确定'该值什么时候是什么类型的,就像上面一开始给了string的值,这个时刻他是string类型的,但是下一秒给了number类型,这时候他就属于number了,所以如果访问这个变量的属性和方法必须是联合的类型公共的方法或者公共的属性才是没问题的。

  • 如上图所示一开始它属于string类型的时候是有length属性的,但是后来变成number类型时就不存在了,这时候就会报错了,所以我们在访问不确定类型的变量属性的时候要小心。


TypeScrip对象的类型——接口🍍


基础用法

  • TypeScript中,我们使用接口(Interfaces)来定义对象的类型,那么什么是接口呢?我觉得可以理解为是一个类似连接中间件的东西,只要双方都满足一定的条件才可以通过这个接口来连接起来,而在定义对象的类型中,接口就像是对对象的形状进行描述。
interface Option {
  label: string;
  value: number;
}
let ageOption: Option = {
  label: '23岁',
  value: 23
};
let agesOption: Option = {
  label: 23, //报错
  value: '23' //报错
};
复制代码
  • 在上面我们可以看到定义了一个interface来描述option的形状需要一个string类型的label和一个number类型的value,所以在下面定义的对象中如果不符合条件就会报错。
  • 接口一般用大写字母开头,在我们定义的变量与接口制作的形状要完全一致,如果少了或多了属性都是不可以的。
interface Option {
  label: string;
  value: number;
}
let ageOption: Option = { 
  label: '23岁'  //报错,跟规定的接口少了一个属性
};
let agesOption: Option = { 
  label: '23岁',
  value: 23,
  sth:'hi'  //报错,跟规定的接口多了一个sth属性
};
复制代码


可选属性

  • 从上面我们了解到接口就是为了规范对象类型而生的,那么有没有那么一种情况我们并不希望对象完全匹配一个接口呢?这时候我们可以使用可选属性
interface Option {
  label: string;
  value?: number;
}
let ageOption: Option = {
  label: '23岁',
  value: 23,
};
let timesOption: Option = {
  label: '分钟',
};
复制代码
  • 从上面我们可以看到在定义接口的时候一个属性使用了?,代表了这个属性是可选的也可以理解为是可有可无的,所以下面的两个对象使用了接口都不会报错。


任意属性

  • 从上面看到我么可以使用可选属性让对象少写于接口的属性,那么有没有办法让我们的的对象定义的时候不局限于接口的属性呢?这时候就要用到任意属性了。
interface Option {
  label: string;
  value?: number;
  [propName: string]: any;
}
let ageOption: Option = {
  label: '23岁',
  value: 23,
  icon:'无图标'
};
复制代码
  • 从上面我们可以看到在接口增加了一个属性类型为any,属性名为string类型的属性,在我们使用接口的时候就可以增加这种属性到对象里面。
  • 值得一提的是如果设置了任意属性,那么其余属性的类型必须是任意属性类型子集,就比如上面的确定属性类型string和可选属性类型number都是任意属性类型any的子集,所以这样是合理的。
  • 一个接口中只能有一个任意属性,如果想让接口中有多个类型的属性,则可以在任意属性中使用联合类型。
interface Option {
  label: string;
  [propName: string]:string | number;
}
let ageOption: Option = {
  label: '23岁',
  icon:'无图标',
  icons:23
};
复制代码


只读属性

  • 有时候我们希望一些属性不能被更改,他的值一开始就确定好,那我们可以使用只读属性
interface Option {
  readonly id: number;
  label: string;
  [propName: string]:string | number;
}
let ageOption: Option = {
  id: 1,
  label: '23岁',
  icon:'无图标',
  icons:23
};
ageOption.id=110 //报错
复制代码
  • 正如上面代码所示,id属性第一次被确定是在定义ageOption对象的时候就被确定了,而它对应的接口中是一个readonly属性,那么它就不可被更改。


写在最后👋


  • 本文也算是记录一下TypeScript的学习,接下来我会持续输出TypeScript相关的知识,大家可以一起来学习。
  • 如果您觉得这篇文章有帮助到您的的话不妨🍉关注+点赞+收藏+评论+转发🍉支持一下哟~~😛


往期精彩🌅


如何优雅的使用Vuepress编写组件示例(上)👈

如何优雅的使用Vuepress编写组件示例(下)👈

「站在上帝的角度」谈谈Element组件结构-Switch

「站在上帝的角度」谈谈Element组件结构-Radio


相关文章
|
25天前
|
JavaScript 前端开发 安全
深入理解TypeScript:增强JavaScript的类型安全性
【10月更文挑战第8天】深入理解TypeScript:增强JavaScript的类型安全性
41 0
|
25天前
|
JavaScript 前端开发 开发者
深入理解TypeScript:类型系统与实用技巧
【10月更文挑战第8天】深入理解TypeScript:类型系统与实用技巧
|
9天前
|
JavaScript 开发者
在 Babel 插件中使用 TypeScript 类型
【10月更文挑战第23天】可以在 Babel 插件中更有效地使用 TypeScript 类型,提高插件的开发效率和质量,减少潜在的类型错误。同时,也有助于提升代码的可理解性和可维护性,使插件的功能更易于扩展和升级。
|
21天前
|
JavaScript 前端开发
TypeScript【类型别名、泛型】超简洁教程!再也不用看臭又长的TypeScript文档了!
【10月更文挑战第11天】TypeScript【类型别名、泛型】超简洁教程!再也不用看臭又长的TypeScript文档了!
|
21天前
|
JavaScript 前端开发 Java
TypeScript【接口】超简洁教程!再也不用看臭又长的TypeScript文档了!
【10月更文挑战第10天】TypeScript【接口】超简洁教程!再也不用看臭又长的TypeScript文档了!
|
23天前
|
JavaScript 前端开发 安全
TypeScript【基础类型】超简洁教程!再也不用看臭又长的TypeScript文档了!
【10月更文挑战第9天】TypeScript【基础类型】超简洁教程!再也不用看臭又长的TypeScript文档了!
|
25天前
|
JavaScript 前端开发 开发者
深入理解TypeScript:类型系统与最佳实践
【10月更文挑战第8天】深入理解TypeScript:类型系统与最佳实践
|
25天前
|
移动开发 JavaScript 前端开发
TypeScript:数组类型&函数使用&内置对象
本文介绍了 TypeScript 中的数组类型、对象数组、二维数组、函数、函数重载、内置对象等概念,并通过代码示例详细展示了它们的使用方法。还提供了一个使用 HTML5 Canvas 实现的下雨效果的小案例。
|
8天前
|
JavaScript 前端开发 安全
TypeScript进阶:类型系统与高级类型的应用
【10月更文挑战第25天】TypeScript作为JavaScript的超集,其类型系统是其核心特性之一。本文通过代码示例介绍了TypeScript的基本数据类型、联合类型、交叉类型、泛型和条件类型等高级类型的应用。这些特性不仅提高了代码的可读性和可维护性,还帮助开发者构建更健壮的应用程序。
15 0
|
25天前
|
JavaScript 前端开发 开发者
深入理解TypeScript:类型系统与实用技巧
【10月更文挑战第8天】深入理解TypeScript:类型系统与实用技巧