当前位置: 首页 > 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.lryc.cn/news/615962.html

相关文章:

  • Shell脚本-变量的分类
  • 从零到精通:嵌入式BLE开发实战指南
  • Spring Boot 全局异常处理与日志监控实战
  • go加速配置(下载第三方库)
  • 元数据管理与数据治理平台:Apache Atlas 通知和业务元数据 Notifications And Business Metadata
  • 《Go小技巧易错点100例》第三十七篇
  • 元数据管理与数据治理平台:Apache Atlas 分类传播 Classification Propagation
  • SQL(结构化查询语言)的四大核心分类
  • 【机器学习深度学习】Embedding 模型详解:从基础原理到实际应用场景
  • MySQL 处理重复数据详细说明
  • 【软件测试】性能测试 —— 工具篇 JMeter 介绍与使用
  • 联合理解生成的关键拼图?腾讯发布X-Omni:强化学习让离散自回归生成方法重焕生机,轻松渲染长文本图像
  • 如何部署图床系统 完整教程
  • ESP32安装于配置
  • Oracle 19C 查看卡慢的解决思路
  • AI+预测3D新模型百十个定位预测+胆码预测+去和尾2025年8月10日第159弹
  • Spring Boot 注解详解:@RequestMapping 的多种用法
  • 第4章 程序段的反复执行4 多重循环练习(题及答案)
  • RAGFlow 拉取 Docker 镜像失败
  • 压力测试等工具源码包编译及使用方法
  • 基于python高校固定资产管理系统
  • 【银行测试】保险项目测试点+测试流程详情(二)
  • scanpy单细胞转录组python教程(一):不同形式数据读取
  • java报错“ NoSuchMethodError:com.test.Service.doRoomList(Ljava/lang/String;)V解决方案
  • Gin 框架错误处理机制详解
  • 线性代数1000题学习笔记
  • 如何将PDF文档进行高效编辑处理!
  • NLP学习开始-02逻辑回归
  • 【Spring IoC 核心实现类详解:DefaultListableBeanFactory】
  • 从策略梯度到 PPO