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

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.dtcms.com/a/324806.html

相关文章:

  • 基于Actor-Critic策略的Atari中的pong_v3
  • 机器学习第八课之K-means聚类算法
  • 零基础学编程,编程从入门到精通系列教程,附:编程工具箱之公用事件的用法#零基础学编程从哪里开始#新手学编程先学什么#公用事件构件编程用法
  • Lua语言变量、函数、运算符、循环
  • 小学数学计算技巧全攻略
  • 攻击者瞄准加密技术的基础:智能合约
  • [网安工具] Web 漏洞扫描工具 —— GoBy · 使用手册
  • Video Lecture 8 Page Fault
  • 7、西门子PLC基础术语:数据单位、存储区域、寻址方式、字节序
  • LightGBM 与 GBDT 在机器学习中的性能与特点比较
  • element-ui el-progress在有小数的情况下,会换行显示。解决不换行的问题。
  • redis集群-本地环境
  • 【前端基础】14、CSS设置背景(background相关的)
  • 正则表达式常用语法参考
  • STM32H7 以太网配置引申的内存问题
  • A2A协议深度理解与实践
  • 解决 .NET Core 6.0 + PostgreSQL 网站首次连接缓慢问题
  • 安全生产基础知识(一)
  • 去除Edge微软浏览器与Chrome谷歌浏览器顶部出现“此版本的Windows不再支持升级Windows 10”的烦人提示
  • 深度剖析 Linux 信号:从基础概念到高级应用,全面解析其在进程管理与系统交互中的核心作用与底层运行机制
  • 【牛客刷题】REAL799 翻转01 (饿了么面试题)
  • Vue 事件冒泡处理指南:从入门到精通
  • 亚麻云之监控管家——CloudWatch基础监控
  • socket编程中系统调用send()详细讲解
  • 《算法导论》第 16 章 - 贪心算法
  • ATF(TF-A)安全通告 TFV-12(CVE-2024-5660)
  • 2025年Java 面试题及答案整理(金九银十最新版,持续更新)
  • vuhub Beelzebub靶场攻略
  • 从零学习three.js官方文档(二)——图元
  • 数据结构2线性表——顺序表