TypeScript学习(五)

TypeScript学习笔记(五)——阶段答疑 摘要: TypeScript开发指南涵盖了从基础编译到高级特性的全面内容。主要包括:1) 使用tsc命令将.ts文件编译为.js文件;2) tsconfig.json配置文件的作用与常用选项;3) 数据类型如模板字符串和数组的使用;4) ===和==运算符的区别及最佳实践;5) forEach与every方法的差异;6) 匿名函数与箭头函数的特性对比。重点强调了类型安全性、代码规范以及现代JavaScript特性的应用,为TypeScript开发者提供了实用的开发指导和最佳实践建议。 阅读详情

1.TS的联合类型(并集)

但是对于 const f1 = (a:number | string) = > { ...... },如果不做处理的话,在方法体内就既不能把a当做number使用,也不能把a当做string使用。所以想要使用联合类型的话,就必须想办法把类型区分开来。

JS中区分类型的方法(JS中的类型收窄(Narrowing)):

1.使用typeof来区分类型 

const f1 = (a:number | string) => {
    if(typeof a === 'number') {
        a.toFixed(2) // 此时a类型为number
    } else if (typeof a === 'string') {
        a.split(',') // 此时a类型为string
    }
}

typeof的局限性:

 

 2.使用instanceof来区分类型

const f1 = (a:Date | Date[]) => {
    if(a instanceof Date) {
        a // 此时a为Date
    } else {
        a // 此时a为Date[]
    }
}

 instanceof的局限性:

1.不支持string、number、boolean...

在TS中使用  if(a instanceof String)会报错

解决该问题可采用与 typeof 混合使用:

const f1 = (a:string | Date | Date[]) => {
    if ( typeof a === 'string') {
        a // 此时a为string
    } else if ( a instanceof Date) {
        a // 此时a为Date
    } else {
        a // 此时a为Date[]
    }
}

2.不支持TS独有的类型

type Person = {
    name:string
}
type Animal = {
    age:number
}
const f1 = (a:Person | Animal) {
    if(a instanceof Person) { // 报错
        a    
    }
}

3.使用 in 来收窄类型

type Person = {
    name:string
}
type Animal = {
    age:number
}
const f1 = (a:Person | Animal) {
    if('name' in a) { 
        a // 此时a为Person
    } else if ('age' in a) {
        a // 此时a为Animal
    }
}

in 的局限性: 只适用于部分对象

4.使用JS中判断类型的函数来区分

 5.使用JS中的逻辑来收窄类型

总结:无论使用JS中的何种区分类型的方法,都会有相应的局限性,故应该使用TS中的区分类型的完全方法。

TS中区分类型的方法:

1.类型谓词/类型判断 is:

type Rect = {
    height:number,
    width:number
}
type Circle = {
    center: [number,number],
    radius: number
}
type Shape = Rect | Circle

const f1 = (s:Shape) => {
    if (isRect(s)) {
        console.log(s.height) // 此时s为Rect
    } else if (isCircle(s)) {
        console.log(s.center) // 此时s为Circle
    }
}

function isRect (x:Rect | Circle): x is Rect {
    return 'height' in x && 'width' in x
}
function isCircle (x:Rect | Circle): x is Circle {
    return 'center' in x && 'radius' in x
}

is的优点:支持所有TS类型;is的缺点:写法麻烦

 2.可辨别联合x.kind:

type Circle = {kind:'Circle', center:[number,number]}
type Square = {kind:'Square',sideLength:number}
type Shape = Circle | Square

const f1 = (a:Shape) => {
    if (a.kind === 'Circle') {
        a // 此时a为Circle
    } else if (a.kind === 'Square') {
        a // 此时a为Square
    }
}

优点:让复杂类型的收窄变成简单类型的对比

要求:T=A | B | C | D | ...

1. A、B、C、D...有相同属性kind或其他  ;2.kind的类型是简单类型 ;3.各类型中的kind可区分     则称T为可辨别联合(一句话总结:同名、可辨别的简单类型的key)                                                                                                                   

3.类型断言as:

用于已知参数类型

什么是所有类型的联合?(所有类型不包括never/unknown/any/void)

答案:unknown

any为什么不是所有类型的联合?

用反证法可以证明

const f1 = (a:number | string) {
    a.toFixed(2) // error
    a.split(',') // error
    // 在未进行类型收窄前只能使用类型共有的方法
}

const f1 = (a:any) {
    a.toFixed()
    a.join()
    a.split(' ')
    // 可以使用任意类型的方法
}

TS中绝大部分规则对any不生效

unknown才是所有类型的联合

const f1 = (a:unknown) => {
    if(typeof a === 'string') {
        a
    }else if (a instanceof Date) {
        a
    }
}

4. Typescript - 提示与技巧 - 并集和交集 在这个例子中,我们可以看到联合类型是如何创建 Pet 类型的;此方法是两种初始类型中唯一存在的方法:Fish 和 Cat。在这种情况下,填充可以是数字或字符串,编译器会检测您是否设置了不同的类型;在某些情况下,我们必须组合不同的类型来创建新类型,或者有时我们有可能属于不同类型的参数。Typescript 为我们提供了两个强大的功能:并集(|) 和交集(&)。如果你喜欢我的文章,记得关注获取更多的信息。联合类型描述的值可以是多种类型之一。交集类型将多种类型组合为一种。 阅读详情

相关推荐

【LTspice】002 第一个仿真电路

目录 1. 光偶元件的工作原理 2. 过零检测电路的工作原理 3. 以PC817光耦搭建一个过零检测电路 1. 光偶元件的工作原理 光耦合器(optical coupler,英文缩写为OC)亦称光电隔离器或光电耦合器,简称光耦。它是以光为媒介来传输电信号的器件。 PC817是一种把红外光发射器件和红外光接受器件以及信号处理电路等封装在同一管座内的器件。当输入电信号加到输入端发光器件LED上,LED发光,光接受器件接受光信号并转换成电信号,然后将电信号直接输出,或者将电信号放大处理成标准数字电平输

m0_59642765的博客 8024

ts中的联合类型(并集)和交叉类型(并集)区别

会把2者的属性进行合并,也就是形成并集,进行类型声明的时候,你的属性可以是前者,属性不能少,当时声明了几个就要写几个,也可以是后者,也可以前者+后者。会把 2者的属性进行合并,也就是形成并集,进行类型声明的时候,你的属性必须是前者+后者,少1个都报错。不能只写前者,也不能只写后者。ts中的联合类型 | 和交叉类型的区别。

Frank_colo的博客 1289

离线AI实战指南:本地部署大模型处理PDF/Word/Excel

离线AI是指在无网络、不上传数据前提下,于个人设备运行大语言模型并完成文档理解、多轮对话与代码辅助等任务的技术方案。其核心依赖本地模型推理、文档解析向量化和轻量级对话调度三大能力。随着Phi-3、Qwen2、Llama3等轻量化开源模型普及,以及Ollama、LM Studio等易用工具成熟,普通用户已可在主流笔记本上实现PDF摘要、合同比对、代码注释等真实办公场景。本文聚焦离线AI的硬件适配、模型选型、文件处理链路与知识库构建,尤其强调中文OCR支持、结构化文档提取与CPU/GPU混合推理优化,助力非开发

weixin_31968639的博客 497

Typescript第二天(类型别名,并集类型和交集类型)

第二天: 1、类型别名 我们可以使用变量声明(let ,const,var)为值声明别名类似的,还可以为类型声明别名 注意 1、TypeScript无法推导类型别名,因此必须显式注解 2、同一类型不能声明两次,不可以有两个一样的type 3、同let和const一样,存在块级作用域,即内部类型别名将遮盖外部类型别名 type Age = number; type Person = { name:string age:Age//number } 2、并集类型和交集类型 为了处理类型的并

qq_42853486的博客 2081

当知识图谱遇见多模态:突破文本界限的智能认知革命

本文探讨了知识图谱与多模态技术的融合,揭示了其在医疗诊断、文化保护等领域的革命性应用。通过图神经网络、对比学习框架和跨模态注意力机制等技术,实现了文本、图像和音频数据的智能关联与认知。文章还分享了在Neo4j等图数据库中的实践案例和优化策略,为构建下一代智能认知系统提供了技术参考。

weixin_29197835的博客 464

AI:240-YOLOv8高效涨点 |Swin Transformer的主干网络替换与优化(附代码 + 详细修改步骤 +原理介绍)

YOLOv8作为目标检测领域的最新版本,在速度和精度之间取得了良好的平衡。然而,随着计算机视觉任务的复杂性不断增加,YOLOv8的标准主干网络(Backbone)在处理高分辨率图像或多尺度目标时,可能存在一定的局限性。为了进一步提升YOLOv8的性能,我们可以引入Swin Transformer替换其主干网络,以增强模型的全局感知能力和多尺度特征提取能力。本文将详细介绍如何在YOLOv8中用Swin Transformer替换原有的Backbone,提供代码示例,并深入探讨其中的原理和效果。

一键难忘的博客 3961

ts多个type合并, 属性不唯一合并冲突问题

type复用时, 需要合并多个type, 合并时一个属性好几个type中有用到, 导致属性不唯一且类型也不相同, 使用&符号合并出来的属性类型为never, 此总情况解决办法

qq_58061710的博客 2002

【精品5万字图文详解】特征平台建设方案与最佳实践

关键词:特征工程、特征平台、特征存储、特征服务、机器学习、数据工程摘要:本文全面介绍了特征平台的建设方案与最佳实践,从特征工程的基本概念出发,深入剖析了特征平台的核心组件、架构设计和实现方法。文章通过生动的类比和实例,使读者能够轻松理解特征工程的重要性及特征平台如何解决企业在机器学习过程中面临的数据管理挑战。同时,详细探讨了主流开源特征平台的对比分析、系统设计要点、实际落地案例以及未来发展趋势,为企业构建高效特征平台提供了全面的指导和参考。想象一下,小明是一位热爱烹饪的小学生。有一天,他想做一道美味的菜肴送

AI天才研究院 954

TypeScript实战-15-TS高级类型-交叉类型

一,前言 TS高级类型,指TS为保证语言的灵活性,所引入的语言特性 这些语言特性有助于开发者应对复杂多变的开发场景 二,交叉类型 交叉类型: 将多个类型合并成为一个新的类型,新类型具有所有类型的特性 应用场景: 由于交叉类型具有所有类型的特性,所以非常适合对象混入的场景 语法: 类型A & 类型B 举例: // 定义两个接口 interface AInterface { ...

BraveWangDev 1236

YOLOv11改进,YOLOv11添加DCNv4可变性卷积(windows系统成功编译),二次创新C3k2结构,全网最详细教程

引入了可变形卷积 v4 (DCNv4),这是一种为广泛视觉应用设计的高效且有效的操作算子。DCNv4通过两项关键增强解决了其前身DCNv3的局限性:1. 移除空间聚合中的softmax归一化,以增强其动态特性和表达能力;2. 优化内存访问以最小化冗余操作,从而加速计算。这些改进使得DCNv4相比DCNv3显著加快了收敛速度,并且处理速度大幅提升,前向传播速度超过三倍。DCNv4在多个任务中表现出色,包括图像分类、实例和语义分割,特别是在图像生成方面表现突出。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 2666

AgentScope Java 入门:Spring AI Alibaba 与 AgentScope 的定位与区别

摘要:Spring AI Alibaba是阿里基于Spring AI开发的本地化AI应用框架,旨在服务Java开发者。它提供模型接入、函数调用、RAG等功能,并与阿里云基础设施深度集成。同时,阿里开源了多智能体框架AgentScope,其Java版(AgentScope-Java)专注于Agentic设计理念。两者将协同发展:Spring AI Alibaba侧重Spring生态集成,AgentScope-Java强化智能体能力。未来计划包括支持AgentScope、升级Admin平台,以及推进Server

SmartSi 1546

typescript学习回顾(五)

ts的泛型

weixin_42770320的博客 928

基于电能质量治理的场景实例:统一电能质量调节器(UPQC)与并网逆变器集成

本文通过Simulink平台,详细演示了统一电能质量调节器(UPQC)与并网逆变器的集成系统建模与仿真过程。主要内容包括:1)系统架构设计,包含光伏并网系统、非线性负载和电压扰动源;2)UPQC主电路设计,包括串联/并联单元拓扑和控制策略实现;3)与并网逆变器的能量交互与协同控制逻辑;4)典型电能质量问题的仿真测试场景。结果表明,该集成系统能有效治理电压暂降(维持负载电压380V±2%)和电流谐波(电网THD<3%),直流母线电压稳定在800V±5V。该系统为应对复杂电能质量问题提供了"电压

xiaoheshang_123的博客 310

TypeScript 基础学习(五)

TypeScript 基础学习(五)之前知识点的运用以及ts中的模块回顾和运用模块命名空间 今天接着学习ts中的类相关知识 之前知识点的运用以及ts中的模块 回顾和运用 /* 综合运用+回顾 功能: 定义一个操作数据库的库,支持Mysql Mssql MongoDb 需求:功能一致 ,都有add update delete get 方法 要求:约束统一的规范以及代码复用 解决思路:需要约束规范 所以要定义接口,需要代码复用所以用到泛型 */ interface DBI<T> {

weixin_44288627的博客 459

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

typescript学习之路(五) —— ts的接口

项目开发中,我们会遇到这样的需求。就是我们需要开发一个函数或者一个插件或者库等等,需要调用者调用时传入指定的参数,比如我们需要的是string类型的或者对象类型的,再或者是对象类型的且里面的属性必须包含什么属性等,如果说我们自己的约定属于彼此之间的约定,那么接口就是ts为你的代码定义的强制契约。 文章目录一般情况下的我们定义的约定接口初探可选属性只读属性额外的属性检查使用类型断言使用类型兼容使...

北极那企鹅丶 2433

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

TypeScript 入门学习(五):TypeScript 泛型

TypeScript 泛型 泛型就是解决类、接口、方法的复用性,以及对不特定数据类型的支持。一般使用大写字母 T、U 等表示,也可以是其他字母。 泛型函数 function getData<T>(value: T): T { return value; } console.log(getData('ssss')); console.log(getData(123)); 泛型...

Star's Tech Blog 294

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

typeScript学习(五)之vue中的使用

在vue中使用js和使用ts还有一些变化的。 来让我们看看在vue中使用ts有哪些变化呢? 先预告一波: 下面我们会使用到常用的五个修饰器 在使用装饰器之前 我们要引入相应的装饰器 import {Component,Vue} from 'vue-property-decorator' @Component 修饰组件 @watch 修饰watch监听 @Prop 修饰props @Model 修饰父组件传入子组件的双向绑定数据 @Emit 修饰父组件传入子组件的函数 父组件: <templ

李@@的博客 2607

TypeScript学习(五)泛型

1.基础泛型 泛型,可以支持不固定的类型,具体类型调用方法时决定 //传入什么类型,返回什么类型 //对参数校验 function get<T>(value:T):T{ return value } console.log(get<number>(123))//123 2.类泛型 通过规定类泛型,增加类的可接收类型,避免声明多余的功能类似的类,提升代码复用 class Minclass<T>{ public list:T[]=[]; //增加元素

qq_42584511的博客 805

TypeScript学习(五)

typescript学习

tianming2018的博客 199

JS学习(五) TypeScript

强类型与弱类型 强类型----------------语言层面限制函数的实参类型必须与形参类型相同 弱类型----------------语言层面不会限制实参的类型 强类型语言不允许任意的隐式数据类型转换,而弱类型则允许 静态类型与动态类型 静态类型------------一个变量声明时它的类型就是明确的,声明过后,它的类型就不允许再修改 动态类型------------在运行阶段才能够明确变量类型,而且变量的类型随时可以改变 ...

w499198977的博客 159

TypeScript学习笔记(五) 类

大家好,我是半虹,这篇文章来讲 TypeScript 中的类

半虹小站 1235

TypeScript学习日记(五)

主要记录所学的typescript的模块化,命名空间,和装饰器三个知识点。

qq_43957263的博客 602

React 和 TypeScript 学习指南(五)

在本章中,我们将了解 共享状态,这是由多个不同组件使用的状态。我们将探讨管理共享状态的三个方法,并讨论每种方法的优缺点。为了实现这一点,我们将构建一个简单的应用程序,其中包含一个显示用户名的头部,主内容也会引用用户名。用户名将存储在需要由多个组件访问的状态中。我们将从最简单的状态解决方案开始。这是使用 React 的一个状态钩子来存储状态,并通过属性将其传递给其他组件。这种方法通常被称为 属性钻取。我们将要了解的第二种方法是 React 中的一个特性,称为 上下文。我们将学习如何创建一个包含状态的上下文,并

龙哥盟 997

TypeScript学习系列(五)泛型

声明:本学习系列参考了TypeScript3.3英文版官网教程

小红帽的博客 296

系统学习 TypeScript(五)——联合类型

到底该怎样限制 res 的类型,让它同时满足 number 和 string 的类型检查呢?这就涉及到我们今天要学的 TypeScript 的另一种类型声明——联合类型。

编程三昧 1088
上一篇: TypeScript学习(四)
下一篇: TypeScript学习(六)
Lxg-JJJJ
博客等级 码龄7年 960粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值