TypeScript 05:交叉类型、索引签名、元组与 enum

【审计专栏】第六十五篇 招投标围标串标模式及利益链识别/关联交易/反洗钱01 编号010构建了一个以规则引擎为核心、AI模型为感知、法律法规知识图谱为底座的双轮合规治理体系。可司法采信:规则引擎的输出直接引用法条原文,符合证据链要求可审计追溯:每条规则触发均有完整日志,支持回放可热更新:规则版本Git管理,灰度发布,秒级回滚高性能:Rete算法增量匹配,100亿+主体高并发信创适配:全面支持鲲鹏、飞腾、昇腾、达梦等国产软硬件此体系可以独立部署,也可作为中央企业、地方政府公共资源交易平台的合规监管中台,真正实现“让数据说话、让规则执法、让法律落地”。维度。 阅读详情

TypeScript 05:交叉类型、索引签名、元组与 enum

有 JS 基础即可阅读。建议先读第 01~04 课。

1. 交叉类型 &:把多个类型「合体」

A & B 表示「同时满足 A 和 B」——和联合类型 |(满足其一)正好相反:

interface Loggable {
  log: () => string
}
interface Timestamped {
  createdAt: number
}

type Entry = Loggable & Timestamped // 且:两个都得有

const e: Entry = {
  log: () => '日志',
  createdAt: 1728800000000,
}

最常用场景:给已有类型追加字段,不用改原类型:

interface Person {
  name: string
}

type Admin = Person & { level: number } // Person 的全部 + 新增 level

const admin: Admin = { name: 'Tom', level: 3 }

同名属性类型冲突时,结果是 never(谁也满足不了):{ a: string } & { a: number } 的 a 就是 never。

2. 索引签名:给「键不固定」的对象立规矩

键是动态的(字典类数据)时,没法逐字段列,用索引签名声明「任意键 → 固定值类型」:

const scores: { [name: string]: number } = { math: 90, english: 85 }

两个要点:

  • strict 下读取结果带 undefined(键是动态的,TS 不敢保证存在):
const math = scores['math'] // number | undefined
math.toFixed(0) // ❌ Object is possibly 'undefined',先判断再用
  • 声明后所有字段必须兼容它:{ [key: string]: string; version: number } 不合法——version 是 number,违反了「任意键都是 string」

Record<string, number> 是它的泛型等价写法。使用建议:能用具体字段就别用索引签名,它是检查强度最低的对象类型。

3. 元组 tuple:定长、定序的数组

数组 number[] 只约束「每个元素是 number」,不约束长度和位置;元组全部约束:

const point: [number, number] = [3, 4] // 恰好两个,都是 number
const bad: [number, number] = [1, '2'] // ❌ 位置类型也要对上

标签元组:给位置起名,可读性大增——多返回值的标准答案:

function divide(
  numerator: number,
  denominator: number,
): [quotient: number, remainder: number] {
  return [Math.floor(numerator / denominator), numerator % denominator]
}

const [quotient, remainder] = divide(17, 5)

剩余元素:[name: string, ...points: number[]] = 第一个是名字,后面随便几个数字。

4. enum 与它的现代替代品

enum 是 TS 的私有语法——它会生成一个真实的运行时对象,而不是可剥掉的注解:

enum Status {
  Loading = 'loading',
  Success = 'success',
}
console.log(Status.Success) // 'success'——运行时真有这个对象

这正是它的问题:第 01 课说过「TS = JS + 类型,注解运行前被剥掉」,而 enum 违反了这个规则(在纯 JS 运行环境直接语法报错),还带来一堆历史坑。现代实践更推荐 as const 对象 + 联合类型:

const STATUS = {
  loading: 'loading',
  success: 'success',
  error: 'error',
} as const

type Status = (typeof STATUS)[keyof typeof STATUS] // 'loading' | 'success' | 'error'

读法:typeof STATUS 拿到对象的类型,keyof 拿到键的联合,索引访问取到「所有值」的联合——效果和 enum 一致,但全程可剥除、和普通对象一样用。

5. 高频报错速查

报错人话
Property 'createdAt' is missing in type ...交叉类型要求字段全齐
Object is possibly 'undefined'索引签名读取后没判空
Index signature for type 'string' is missing ...对象字段类型与索引签名不兼容
Source has 3 element(s) but target allows only 2元组长度超了
Type '"loaded"' is not assignable ...状态值不在 as const 联合里(多半拼错)
地图打印与 GeoTIFF 导出:框选区域、矢量标绘、一键出图 空间智能实验室 Vol.19:地图打印与 GeoTIFF 导出:框选区域、矢量标绘、一键出图 「把这块区域导成一张带地理坐标的高清图」是个很朴素的需求,但朴素不等于简单。你要在浏览器里框一个框、画几个箭头标个文字、叠一层 阅读详情

相关推荐

RS-485调试踩坑实录:MAX13487数据回环问题排查与修复(附电路图)

本文深入解析了RS-485通信中MAX13487芯片的数据回环问题,提供了详细的排查过程和解决方案。通过分析芯片特性和自动换向机制,揭示了RO引脚配置不当是导致问题的关键原因,并给出硬件(添加上拉电阻)和软件(调整MCU配置)两种修复方案,附有优化设计建议和实际调试技巧。

play7的博客 1301

HarmonyOS 6 效果实现:透明度 opacity 属性动态动画,消息提示淡入淡出效果,配合 animateTo 完成渐变动画

鸿蒙操作系统是华为推出的面向万物互联时代的分布式操作系统,其设计目标是实现跨设备的无缝协同与能力共享。在应用开发层面,鸿蒙提供了ArkUI框架,这是一套基于声明式编程范式的UI开发框架,支持开发者以极简的代码描述复杂的界面结构与交互逻辑。ArkTS是在TypeScript基础上扩展而来的语言,它在保留了TypeScript完整类型系统的基础上,针对UI声明式编程做了深度优化。ArkTS引入了一系列装饰器(Decorator)来标注组件、状态、构建器等概念,使编译器能够在编译期进行更严格的类型检查和性能优化。

2401_89578244的博客 293

KUKA机器人与S7-1200 PLC实现Profinet通讯配置步骤详解

在工业自动化产线中,PLC与工业机器人之间的高效数据交换是控制逻辑落地的关键。传统硬接线方案在信号点多时布线复杂、故障排查困难,而现场总线技术通过一根网线即可实现主从设备间的周期通讯。Profinet作为主流工业以太网协议,由S7-1200作为IO Controller主站,KUKA机器人作为IO Device从站,在WorkVisual与TIA Portal中完成设备组态、I/O映射及信号分配,即可替代成捆电缆,稳定传输启停、状态及报警信号。这一方案适用于汽车、3C、物流等行业的自动化产线,尤其适合需要扩

weixin_42519985的博客 251

HarmonyOS ArkTS API 24 buildCourseSign 是一个具有业务逻辑的工厂函数,接收一个 CourseItem 对象,将其 quota(剩余席位)减 1

鸿蒙操作系统(HarmonyOS)作为华为自主研发的全场景分布式操作系统,从诞生之初就致力于打通手机、平板、智慧屏、车载设备、可穿戴设备等多种终端形态,实现"一次开发、多端部署"的愿景。在鸿蒙的应用开发体系中,ArkTS 语言扮演着至关重要的角色。ArkTS 是在 TypeScript 基础上扩展而来的编程语言,它保留了 TypeScript 的静态类型检查能力,同时针对声明式 UI 编程范式进行了深度优化和语法扩展。与传统的命令式 UI 开发方式不同,ArkTS 鼓励开发者以"描述界面应该是什么样子"而非

2501_92985290的博客 1962

SAP数据导入工具(LSMW) 超级详细教程(批量导入内部订单)

用户提了个需求,让我批量导入内部订单几百个内部订单。我本打算用写段ABAP 代码来调用 BAPI (BAPI_INTERNALORDER_CREATE)就可以了。但想到我很久没有用过LSMW 了,都快要忘记了。于是我采用LSMW的方式,完成了任务。并把过程记录下来,形成教程方便我以后回头查看,分享出来也希望对大家有帮助。

IT小职员 2万+

基于 LSTM 的船舶轨迹预测,单步预测

基于 LSTM 的船舶轨迹预测,单步预测

fyuhao的博客 1万+

Promise.all、allSettled、race、any 怎么选,失败后其他请求会怎样

通过局部失败和备用服务案例比较 Promise.all、allSettled、race、any,补充取消、fetch 状态、空输入和并发限制。程序员Sunday整理,完整问答收录于 sunday面试指南。

LGD_Sunday的专栏 232

扣子(coze)案例^第22期:零代码打造小红书竞品监控系统+AI自动生成运营策略建议

本文详细介绍了如何利用扣子(coze)平台零代码搭建小红书竞品监控系统。该系统通过自动化工作流抓取竞品笔记数据,并存入飞书多维表格,结合AI能力自动生成包含可视化分析报告在内的运营策略建议,帮助运营者高效进行数据驱动的市场分析。

weixin_29313239的博客 1007

Web 版翻译者资料库

本项目是桌面版《翻译者资料库》的 Web 移植版,基于 Spring Boot 3.3、Thymeleaf、Bootstrap 5.3 与 MySQL 8.0 构建。它面向翻译写作提供资料、词汇、句库、文本工具、对照制作、查找、备份恢复及旧库迁移等功能,完整继承桌面版核心业务规则,支持一键启动与离线访问。

howard2005的专栏 149

知识图谱-Neo4j-开始构建知识图谱-01

关系(Relationships):连接两个节点,具有方向(→ 或 ←)和类型(Type),可附加属性。 属性(Properties):键值对,存储节点或关系的详细信息(如 , )。 (2) Cypher 查询语言 直观语法:通过模式匹配直接描述图结构。 高效遍历:支持复杂关系路径查询(如最短路径、模式匹配)。 3. 核心优势 (1) 原生图存储 物理存储优化:数据以图结构直接存储,避免传统数据库的“表连接”开销。 高效遍历:通过指针直接访问相邻节点,时间复杂度接近 O(1)。 (2) 高性

寓教于乐。教己助人 1万+

电力系统分析 | Matlab实现源荷场景生成---蒙特卡洛法场景生成启发式同步回带削减

电力系统分析 | Matlab实现源荷场景生成---蒙特卡洛法场景生成启发式同步回带削减

前程算法屋的博客 813

Jackson 序列化 / 反序列化注解 完整版笔记

Jackson 序列化 / 反序列化注解 完整版笔记

handsome_sai的博客 303

【ESP32摄像头开发实例】-视频流接入Home Assistant

在这个项目中,我们将使用ESP32-CAM板构建一个IP监控摄像头。ESP32摄像头将托管一个视频流媒体网络服务器,您可以使用网络中的任何设备进行访问。

视觉与物联智能 792

MCP 协议会成为前端 AI 工程的标准接口吗?

MCP(Model Context Protocol)正在成为连接 AI 模型与外部工具、数据源的一层通用协议。本文从 MCP 的核心机制出发,分析它在浏览器与前端工程中的落地边界,讨论它能否成为前端 AI 工程的标准接口,并给出当下更务实的架构选择建议。

m0_62937412的博客 372

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LangGraph 本地 build 频频翻车,最终在服务器跑通流式对话

先说结论:我本地那个,一次都没成功过。三次,三次,全挂在拉镜像上。而顺得像刚上过油。这就很像我高中那辆自行车:骑着能走,一上锁就坏。那天晚上我盯着终端里那行红字看了很久,想的不是技术方案,想的是——为什么同一个工具,可以一边让我觉得自己很行,一边让我觉得自己不太行。

人工智能AI技术 319

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

带着小白学习-微服务-6 实战:网关

地址栏输入:http://localhost:8088/goods/index,这时候就不是到8100端口去调用了,而是8088直接通过路由转发,分别到nacos对应的goods对应的服务中区调用。** 可以看出,这里将前面已经正常运行的server-store子工程(库存服务,服务提供方),server-goods子工程(商品服务,服务消费方)。(1)uri: lb://store 代表要到nacos的注册中心的服务列表中找到服务名为store的微服务;,网关是做路由转发,不是服务调用;

wdyan297的博客 218

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

海外平台频繁弹验证?从 DNS、WebRTC 到浏览器指纹的环境异常排查清单

在运营多地区海外平台账号时,即使代理节点通畅、TCP 握手成功,仍可能遇到频繁人机验证、地区限制、播放失败等异常。核心结论是:这类问题往往不在网络传输层,而在浏览器环境参数与网络出口之间的逻辑自洽性。本文从 DNS 泄漏、WebRTC 穿透、时区与语言匹配、Canvas/WebGL 指纹、TLS 特征五个维度,给出一份可复现的环境异常排查清单,并对比个人手动配置与工程化环境管理方案的适用边界。适用于跨境运营、多账号运维团队。

P1Browser【p1指纹浏览器】的博客 205

智能问诊的流程

本文介绍基于FastAPI构建的医疗多Agent系统MediAgent,通过症状分析、诊断推理与治疗建议等模块协同,实现从问诊到报告生成的完整工作流。系统采用前后端分离架构,结合MySQL、RabbitMQ与Docker实现工程化部署,支持异步化验结果接入。虽当前状态暂存于内存,但已具备可扩展性,未来可通过Redis持久化、消息队列联动及医疗安全机制完善,应用于慢病管理、辅助决策等场景,推动AI在医疗流程中的落地应用。

Joey 的工作空间~ 782

信号链电路怎么选运放?奥特四款信号链运放解析【选型参考】

在模拟电路设计中,运放作为信号链的“第一道门槛”,其微小误差往往决定了整个系统的成败。

naNa_1120的博客 194

基于 YOLOv8 的森林火灾检测系统(Web 版)

本项目面向林区早期火情识别场景,使用YOLOv8完成火焰(Fire)与烟雾(Smoke)两类目标的检测模型训练,并以FastAPI构建 Web 检测平台,把模型能力封装为可直接登录使用的系统。平台除常规的图片、批量、视频、摄像头检测外,还提供同图多权重对比、数据集浏览与标注核对、模型热切换,以及把训练搬到网页上的能力:可在浏览器配置超参数发起真实训练,训练中在线调整学习率、查看进度与动态曲线,训练完成后下载产物或直接应用到检测。

Michael_Jay的博客 66

身份验证漏洞专题(三):持久登录、密码重置与密码修改中的凭据绑定缺陷

密码登录与双因素认证是身份验证的主干流程,但一个完整的认证体系还依赖三类辅助机制:持久登录("记住我")、密码重置、密码修改。这三类机制的共同特征是:它们同样携带或验证凭据,同样直接决定认证状态的归属,但实现时获得的防护强度往往远低于登录页面本身。攻击者绕不开登录接口时,常常可以从这些辅助入口进入。

2401_85321170的博客 641

二进制木马免杀-Python 分离免杀与 Web 挂马

二进制木马免杀-Python 分离免杀与 Web 挂马

2503_94637398的博客 269

2026 年前端框架排行榜

前端框架是用于构建用户界面的工具集合,通过预设组件、网格系统和样式规范提升开发效率与可访问性。2026年主流框架包括:React(生态领先,适合全栈)、Next.js(SSR/SEO优化,主流选择)、Vue(学习友好,中小团队首选)、Angular(企业级稳定)、Svelte与Astro(性能突出)。趋势显示,服务端渲染、TypeScript、AI工具融合及轻量化成为关键方向。就业建议:优先学React+Next.js;追求易用选Vue;企业级项目可学Angular;追求极致性能可尝试Svelte或Astr

lxttzlove的博客 198

Vue 前端开发 AI 对话页面:流式消息渲染、文件上传

关键点是不能手动设置 Content-Type 为 multipart/form-data,必须由浏览器自动生成带有 boundary 的请求头,否则后端无法解析。思路:将对象序列化为 JSON 字符串,作为 FormData 的一个普通字段(如 formData.append(‘payload’, JSON.stringify(data))),后端接收该字段后再反序列化。若上传大文件(>10MB),需实现独立的分片上传接口,在提交对话前先获取文件 id 或 url,再随文本发送引用。移除输入框的禁用态;

2402_85729970的博客 396

Writeup 4 0xGame 2021 · command (WEB)

前端限制不可信:永远不要相信前端的任何限制(如disabled按钮、JS 验证等)。攻击者可以直接构造 HTTP 数据包绕过前端校验,所有的安全限制必须在后端实现。命令执行/注入(RCE):Web 应用如果直接调用系统命令且未对输入进行严格过滤,攻击者可以利用;||等符号拼接恶意命令。绕过技巧:在 CTF 中,如果遇到命令执行被过滤,常见的绕过方式包括:${IFS}$IFS$9等。。cat /fla?或cat /fl*。Linux 基础。

hengdonghui的博客 133

从一次检测到持续验证,重新认识 Web 应用安全测试

围绕漏洞修复后再次出现的问题,结合 Burp Suite DAST 与 GraphQL 示例,解析周期检测、证据管理和整改复测的实现思路。

m0_75220675的博客 334
上一篇: TypeScript 04:类型断言与类型守卫
下一篇: TypeScript 06:函数类型与四大特殊类型
ZoeLandia
博客等级 码龄6年 734粉丝 183原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值