当前位置: 首页 > backend >正文

TypeScript 中的as const是什么?

const options = {url: "https://www.coderwhy.org/abc",method: "POST"
} as const

是在 TypeScript 里用 as const 把对象变成 “只读字面量类型”。我帮你一步步拆开。

1. 没有 as const

const options = {url: "https://www.coderwhy.org/abc",method: "POST"
}

TS 会自动推断:

{url: string;method: string;
}

也就是说:

  • url 被推成普通的 string 类型,而不是 "https://www.coderwhy.org/abc" 这个固定值。

  • method 被推成 string 类型,而不是 "POST" 这个固定值。

  • 属性默认是可改的。

所以你可以这样:

options.url = "xxx"; // ✅ 允许
options.method = "GET"; // ✅ 允许

2. 加了 as const

const options = {url: "https://www.coderwhy.org/abc",method: "POST"
} as const

TS 会推断成:

{readonly url: "https://www.coderwhy.org/abc";readonly method: "POST";
}

也就是说:

  • 每个属性的类型变成了 字面量类型(具体的值),而不是普通 string

  • 所有属性变成了 只读(readonly),不能修改。

结果:

options.url = "xxx"; // ❌ 报错:不能修改只读属性
options.method = "GET"; // ❌ 报错

3. 什么时候用 as const

常见场景:

  1. 定义不可变配置
    避免别人修改。

  2. 做字面量类型推导
    比如联合类型:

const METHODS = ["GET", "POST", "PUT"] as const;
type Method = typeof METHODS[number]; // "GET" | "POST" | "PUT"

        3.和函数参数搭配,保证传的是字面量类型:

function request(url: string, method: "GET" | "POST") {}
request(options.url, options.method); // ✅ 因为 method 是 "POST" 不是 string

💡 总结

  • as const = 让所有属性都只读 + 让值保持字面量类型

  • 作用是让 TS 更精确地知道你的变量的值,防止无意中改动。


🔍 一句话记住
as const = 属性全变 readonly + 值锁定为字面量类型。

这样 TypeScript 就不会帮你“泛化”成宽泛的类型,而是保留成精确值类型。

http://www.xdnf.cn/news/17418.html

相关文章:

  • React:useEffect 与副作用
  • token危机解决?扩散模型数据潜力3倍于自回归,重训480次性能仍攀升
  • 浏览器CEFSharp88+X86+win7 之多页面展示(四)
  • LLaMA-Adapter Efficient Fine-tuning of Language Models with Zero-init Attention
  • Redis - 使用 Redis HyperLogLog 进行高效基数统计
  • Spring Boot与WebSocket构建物联网实时通信系统
  • 基于Spring Boot和WebSocket的实时聊天系统
  • go语言运算符
  • 遇到前端导出 Excel 文件出现乱码或文件损坏的问题
  • Linux 管道命令及相关命令练习与 Shell 编程、Tomcat 安装
  • 基于Ubuntu20.04的环境,编译QT5.15.17源码
  • Lua语言元表、协同程序
  • JavaWeb(苍穹外卖)--学习笔记17(Apache Echarts)
  • LightGBM 与 GBDT 在机器学习中的性能与特点比较
  • Graph-R1:一种用于结构化多轮推理的智能图谱检索框架,并结合端到端强化学习
  • 【最后203篇系列】031 构建MCP尝试
  • Docker Compose 部署高可用 MongoDB 副本集集群(含 Keepalived + HAProxy 负载均衡)
  • 从零学习three.js官方文档(二)——图元
  • 去除Edge微软浏览器与Chrome谷歌浏览器顶部出现“此版本的Windows不再支持升级Windows 10”的烦人提示
  • JavaWeb(苍穹外卖)--学习笔记18(Apache POI)
  • 安全引导功能及ATF的启动过程(五)
  • 数据结构:栈和队列(Stack Queue)基本概念与应用
  • AI编程插件对比分析:CodeRider、GitHub Copilot及其他
  • 云服务器最新版MySQL 安装步骤
  • 第4章 程序段的反复执行1 for语句P115练习题(题及答案)
  • Matlab系列(004) 一 Matlab分析正态分布(高斯分布)
  • cuOpt_server错误分析
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘fastai’问题
  • 面试题-----Spring Cloud
  • LLM 的向量的方向表示语义,向量长度表示什么