Typescript进阶类型-简化基础

typescript进阶类型主要是有联合类型、交叉类型、类型断言以及类型断言接口,在开发场景中使用这些类型是比较常见的。接下来,讲简化如何使用这些类型,如下:

1.联合类型

这个联合类型的概念,使用比较简单,一般通过管道(|)设置多种类型,例如number|string|boolean等。返回类型结果就要根据设置过多种类型。

typescript 复制代码
// 联合类型
let phone:number | string = 19231233 
// OR
let phone:number | string = '175232323'

以上的就是有两种类型为字符串类型和数字类型,返回类型可以是数字也可以是字符串。

typescript 复制代码
const fn = (something:number|boolean):boolean =>{
     return !!something
 }
 console.log(fn(1))

参数返回类型有两个类型:数字和布尔的类型,当被调用的时候传参数为数字,且返回类型是布尔类型。

typescript 复制代码
let arr:number[]|string[]
arr = [1,2,3]
// OR
arr = ['数字','字符串','布尔']

联合类型也可以写数组以及类型。

2.交叉类型

交叉类型就是多种类型合并为一个类型,简称说并集。交叉类型和联合类型很类似,但是区别在于联合类型一般当返回类型的时候根据变量名设置多个指定类型去匹配;交叉类型支持把每个类型称为合并类型。

typescript 复制代码
interface Info{
    name:string,
    age:number
}
interface Sex{
    sex:string
}
 // 类似extend继承
 const result = (people:Info & Sex):void=>{
     console.log(people)
 }
 result({
     name:'小斌',
     age:18,
     sex:'男'
 })

交叉类型接口,和extend继承差不多一样的,通过交叉&两个不同的接口合并为一个接口,说明扩展性很强。

3.类型断言

类型断言就是可以通过手动指定一个类型,同时要告诉编译器为了推断根据手动指定的类型,使用类型断言语法:值 as 类型。 (1)非类型断言

typescript 复制代码
 let fn = function(num:string|number):void {
     console.log(num.length)
 }
 fn('1234')

报错,length不存在,是因为传一个字符串类型,所以并不是一个数字类型。

(2)类型断言

typescript 复制代码
 let fn = function(num:string|number):void {
    console.log((num as string).length)
 }
 fn('123534')

通过类型断言,告诉编译器指定类型为数字类型。

4.类型断言接口

typescript 复制代码
 interface A{
    name:string
 }
 interface B{
     build:string
 }
 const fn = (type:A | B):string=>{
     return type.name
 }

这样写上有警告的应为B的接口上面是没有定义这个成员属性。

typescript 复制代码
interface A {
    name: string
}
interface B {
    build: string
}
const fn = (type: A | B): string => {
    return (type as A).name
}

可以使用类型断言来推断他传入的是A接口的值。

需要注意的是,类型断言只能够欺骗typescript编译器,无法避免运行时的错误,反而滥用类型断言可能会导致运行时错误。

5.深入类型断言

(1)any

typescript 复制代码
  // 使用any临时断言
  window.abc = 123

这样写会报错因为window没有abc这个变量名。

使用类型断言如下:

typescript 复制代码
  (window as any).abc = 123

可以使用any临时断言在any类型的变量上,访问任何属性都是允许的。

(2)const

typescript 复制代码
   const abc:string = 'const'
   abc = 'tutu'

这样写const一旦声明之后赋值是无法修改的。

(3)数组

typescript 复制代码
let a1 = [10, 20] as const;
const a2 = [10, 20];

a1.unshift(30); // 错误,此时意见断言字面量为[10,20],数据是没办法修改的。

a2.unshift(40); //通过,是没有修改的指针。

相关推荐
你脸上有BUG12 分钟前
【工程化】前端打包时间优化
前端
TeleostNaCl13 分钟前
Google Chrome 浏览器历史记录的存储位置
前端·chrome·经验分享
大模型教程19 分钟前
前端可以转型AI工程师吗?那可太能了...
前端·llm·agent
转转技术团队24 分钟前
前端开发应该了解的浏览器背后的黑科技
前端
2503_9284115626 分钟前
12.15 element-plus的一些组件(上)
前端·vue.js
JS_GGbond37 分钟前
JavaScript原型链:一份会“遗传”的家族传家宝
前端·javascript
前端达人38 分钟前
CSS终于不再是痛点:2026年这7个特性让你删掉一半JavaScript
开发语言·前端·javascript·css·ecmascript
JS_GGbond42 分钟前
当JS拷贝玩起了“俄罗斯套娃”:深拷贝与浅拷贝的趣味对决
前端·javascript
code_YuJun1 小时前
脚手架开发工具——npmlog
前端
donecoding1 小时前
掌握 :focus-within,让你的AI对话输入体验更上一层楼!
前端·人工智能