「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


相关文章
|
26天前
|
JavaScript 前端开发 Java
TypeScript 类型兼容性
TypeScript 类型兼容性
|
10天前
|
JavaScript 前端开发 IDE
TypeScript中的声明文件(.d.ts):扩展类型系统
TypeScript的`.d.ts`声明文件为JS库提供类型信息,增强IDE支持,如自动完成和类型检查。通过声明合并,可在全局作用域定义类型。示例包括为`my-library`创建声明模块,导出函数和接口。声明文件通常存于`@types`或指定`typeRoots`。用于旧JS代码的类型注解,如`myGlobalObject`。学习更多,参阅TypeScript官方文档。分享你的TS声明文件经验!
|
23天前
|
JavaScript 前端开发 安全
TypeScript:静态类型的动态语言
【6月更文挑战第9天】TypeScript是JavaScript的静态类型超集,解决JS类型安全问题,提供更强的代码组织和维护。它引入静态类型、接口和类,增强类型安全,减少运行时错误。TS与JS无缝集成,兼容现有库和框架,拥有丰富的开发工具和活跃社区。广泛应用在各种规模项目中,尤其提升复杂前端应用的代码质量。学习TypeScript对提升开发效率和代码可靠性极具价值。
27 10
|
21天前
|
前端开发 JavaScript 安全
TypeScript作为一种静态类型的JavaScript超集,其强大的类型系统和面向对象编程特性为微前端架构的实现提供了有力的支持
【6月更文挑战第11天】微前端架构借助TypeScript提升开发效率和代码可靠性。 TypeScript提供类型安全,防止微前端间通信出错;智能提示和自动补全加速跨代码库开发;重构支持简化代码更新。通过定义公共接口确保一致性,用TypeScript编写微前端以保证质量。集成到构建流程确保顺利构建打包。在微前端场景中,TypeScript是强有力的语言选择。
31 2
|
4天前
|
JavaScript 安全 开发者
Vue3 中更好地利用 TypeScript 的类型系统来提高代码质量
Vue3 中更好地利用 TypeScript 的类型系统来提高代码质量
|
26天前
|
JavaScript
TypeScript 泛型类型
TypeScript 泛型类型
|
5天前
|
JavaScript 前端开发 程序员
typescript入门笔记分享
typescript入门笔记分享
6 0
|
6天前
|
JavaScript 安全
TypeScript类型(数字、字符串、字面量、数组、元组、枚举、对象等)
TypeScript类型(数字、字符串、字面量、数组、元组、枚举、对象等)
7 0
|
6天前
|
JavaScript
TypeScript类型申明
TypeScript类型申明
6 0
|
26天前
|
JavaScript 算法
TypeScript 类型推论
TypeScript 类型推论