首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Typescript中使用"as const“而不添加"readonly”修饰符?

在Typescript中使用"as const"而不添加"readonly"修饰符的作用是将一个变量声明为只读的字面量类型。通过使用"as const",可以确保变量的值在声明后不会被修改,从而提供更严格的类型检查和更好的代码可读性。

具体来说,"as const"用于将一个变量的类型推断为其字面量值的类型。例如,如果我们有一个变量声明如下:

代码语言:txt
复制
const colors = ["red", "green", "blue"] as const;

使用"as const"将会将colors的类型推断为readonly ["red", "green", "blue"],即一个只读的元组类型。这意味着我们不能对colors进行修改或重新赋值。

使用"as const"的优势在于它提供了更严格的类型检查。在上述例子中,如果我们尝试修改colors的值,TypeScript编译器会报错:

代码语言:txt
复制
colors[0] = "yellow"; // Error: Index signature in type 'readonly ["red", "green", "blue"]' only permits reading

这样的类型检查可以帮助我们避免意外的修改,提高代码的可靠性和可维护性。

此外,"as const"还可以用于更复杂的对象字面量类型。例如:

代码语言:txt
复制
const person = {
  name: "John",
  age: 30,
  address: {
    street: "123 Main St",
    city: "New York"
  }
} as const;

使用"as const"将会将person的类型推断为:

代码语言:txt
复制
{
  readonly name: "John";
  readonly age: 30;
  readonly address: {
    readonly street: "123 Main St";
    readonly city: "New York";
  };
}

这样,我们可以确保person对象及其嵌套属性的值不会被修改。

在实际应用中,使用"as const"可以帮助我们更好地定义和使用只读的字面量类型,提高代码的可靠性和可读性。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

TypeScript 5.0 现已发布:全新的装饰器,速度、内存和包大小优化

从构造函数推断类属性 TypeScript 5.0 引入了将 const 修饰符添加至类型参数声明的功能,也就是默认做 const-like 推断。...这项功能非常适合那些需要具体类型, TypeScript 已经推断出较通用类型的场景。以往,为了实现 const-like 推断,开发者需要在某些位置添加“as const”。...Const 修饰符会影响调用编写的对象、数组和原始表达式的推断,但不会拒绝可变值、或者说需要不可变约束。因此,开发者必须牢记 const 修饰符的行为以确保正确使用。... TypeScript 5.0 之前,arg.names 的推断类型为 string[],但如果我们需要的是 readonly string[],则需要在调用函数时使用 as const 进行断言。...而在 TypeScript 5.0 ,我们可以将 const 修饰符添加至类型参数声明当中,借此默认进行 const-like 推断。

94810

【TS】1294- 搞懂 TypeScript 的映射类型(Mapped Types)

我们实际开发,经常会需要一个类型的所有属性转换为可选类型,这时候你可以直接使用 TypeScript 的 Partial工具类型: type User = { name: string;...Type '"name"' is not assignable to type 'User2'. */ 四、映射修饰符的应用 自定义映射类型的时候,我们可以使用两个映射类型的修饰符来实现我们的需求...修饰符:将指定属性设置为可选类型; 前面介绍 Readonly和 Partial工具类型的时候已经使用到: type Readonly = { readonly [P in keyof T]:...: T[P] | undefined; } 当然,也可以对修饰符进行操作: +添加修饰符(默认使用); -删除修饰符; 比如: type Required = { [P in keyof...修饰符 }; 也可以放在前面使用: type NoReadonly = { -readonly [P in keyof T]: T[P]; // 通过 - 删除 readonly 修饰符 }

2.3K10
  • TypeScript 5.0 正式发布!

    到目前为止,通常不得不在某些地方添加const,以实现所需的推断: // 我们想要的类型: readonly ["Alice", "Bob", "Eve"] // 我们得到的类型: string[] const... TypeScript 5.0 ,可以类型参数声明添加const修饰符,从而使类const推断成为默认值: type HasNames = { names: readonly string[]...; // T 是 readonly ["a", "b", "c"] fnGood(["a", "b" ,"c"]); 同样,要记住,const修饰符只影响调用编写的对象、数组和基本类型表达式的推断...这些条件将添加到解析器默认使用的现有条件。..., 123); // ❌ 编辑器区分大小写的导入排序 Visual Studio 和 VS Code 等编辑器TypeScript 支持组织和排序导入和导出的体验。

    3.9K70

    TypeScript 演化史 — 第二章】基于控制流的类型分析 和 只读属性

    严格的 Null 检查 当与可空类型一起使用时,基于控制流的类型分析尤其有用,可空类型使用包括 null 或undefined 联合类型的表示。...严格的 null 检查模式下,undefined 的类型会自动添加到可选属性的联合类型,因此我们不必显式将其写出。 明确赋值分析 基于控制流的另一个新特性是明确赋值分析。...其思想是确保每个不可空的局部变量使用之前都已正确初始化。 只读属性 TypeScript 2.0 readonly 修饰符添加到语言中。...修饰符应用于类声明的属性。..., ]; // Error: 类型 “ReadonlyArray” 的索引签名仅允许读取 primesBelow10[] = ; 只读与不变性 readonly 修饰符TypeScript

    2K10

    这 5 个 TypeScript 的功能特征,你需要熟悉下

    有时,由于没有使用正确的 TypeScript 功能并且没有遵循其最佳实践,可能会出现大量代码重复和样板。 本文中,我们将研究 TypeScript 可以赋予我们的五个最重要的功能。...让我们创建一个方法来将任何定义的类型添加到数组: function addItem(item: string, array: string[]) { array = [...array, item...通过简单地使用泛型,我们可以重用代码不是添加更多样板: function addItem(item: T, array: T[]) { array = [...array, item];...在这种情况下,它用于删除 readonly 修饰符。它可用于从属性删除其他修饰符,例如 ?。 5、类型保护 类型保护是一组帮助我们缩小对象类型的工具。...最后的想法 本文中,我们只是探讨了我们可以使用的最重要的 Typescript 功能。由于这只是一个概述,我们只是触及了它们的表面。 我的目标是让你好奇并展示 Typescript 的能力。

    1.3K40

    TypeScript 演化史 — 第七章】映射类型和更好的字面量类型推断

    使用映射类型,可以捕获类型系统类似 Object.freeze() 等方法的效果。冻结对象后,就不能再添加、更改或删除其中的属性。...除了 Point 类型之外,还必须定义 FrozenPoint 类型,这样才能将 readonly 修饰符添加到两个属性。...更多映射类型的示例 上面已经看到 lib.d.ts 文件内置的 Readonly 类型。此外,TypeScript 定义了其他映射类型,这些映射类型各种情况下都非常有用。... TypeScript 2.0 ,类型系统扩展了几个新的字面量类型: boolean 字面量类型 数字字面量 枚举字面量 不带类型注解的 const 变量或 readonly 属性的类型推断为字面量初始化的类型...readonly 修饰符只限制从 TypeScript 代码对属性的访问,在运行时就无能为力。也就是说,它会被编译时删除掉,不会出现在生成的 JS 代码

    3.8K40

    TypeScript 演化史 -- 7】映射类型和更好的字面量类型推断

    使用映射类型,可以捕获类型系统类似 Object.freeze() 等方法的效果。冻结对象后,就不能再添加、更改或删除其中的属性。...除了 Point 类型之外,还必须定义 FrozenPoint 类型,这样才能将 readonly 修饰符添加到两个属性。...方括号使用了 keyof 操作符。keyof T 将 T 类型的所有属性名表示为字符串字面量类型的联合。 方括号的 in 关键字表示我们正在处理映射类型。... TypeScript 2.0 ,类型系统扩展了几个新的字面量类型: boolean 字面量类型 数字字面量 枚举字面量 不带类型注解的 const 变量或 readonly 属性的类型推断为字面量初始化的类型...readonly 修饰符只限制从 TypeScript 代码对属性的访问,在运行时就无能为力。也就是说,它会被编译时删除掉,不会出现在生成的 JS 代码

    2.8K10

    TypeScript

    target为“es5”时,const h: symbol = Symbol();会报错,因为es5标准没有Symbol,解决方法,tsconfig.json的lib添加["ES2015"],同理...console.log浏览器当中是BOM所提供的,而在TypeScript把BOM 和DOM都归结到DOM一个标准库,所以lib需要追加["DOM"] image.png image.png...类型 // 方式二 const num2 = res; //断言为number,JSX下不能使用 十六、TypeScript 接口 export {}; //确保和其他示例没有成员冲突...//可以使用静态方法 console.log(jack.name); 二十、TypeScript 类的只读属性 readonlyreadonly 和访问修饰符同时存在,readonly 写在访问修饰符的后面...protected readonly gender: boolean; //只能在子类成员访问 并且只读不能修改 二十一、TypeScript 类与接口 使用 implements 关键字 //

    1.8K41

    TypeScript 官方手册翻译计划【五】:对象类型

    项目地址:TypeScript-Doc-Zh,如果对你有帮助,可以点一个 star ~ 本章节官方文档地址:Object Types 对象类型 JavaScript ,最基础的分组和传递数据的方式就是使用对象... TypeScript ,我们则通过对象类型来表示。...只读属性 TypeScript ,我们可以将属性标记为 readonly,表示这是一个只读属性。虽然这不会改变运行时的任何行为,但标记为 readonly 的属性类型检查期间无法再被重写。...使用 TypeScript 进行开发的过程,它可以有效地表明一个对象应该如何被使用。...function doSomething(pair: readonly [string, number]) { // ... } TypeScript 无法重写只读元组的任何属性。

    1.8K30

    杀手级的TypeScript功能:const断言

    const 断言 1const x = { text: "hello" } as const; 官方文档给出了这样的解释: TypeScript 3.4 引入了一个名为 const 断言的字面值的新构造...用新的 const 功能,我可以这样做: 1let y = 'x' as const; // y has type 'x'` 对象字面量获取只读属性 Typescript 3.4 之前,类型扩展发生在对象字面量...: number }; 你会注意到从 setCount 推断的类型已经每个属性附加了 readonly 修饰符,正如文档的项目符号所述。...这就是所发生的事情: 1{ 2 readonly type: "SET_COUNT"; 3 readonly payload: number 4}; action 的每个字面量都被添加readonly...数组字面量成为只读元组 TypeScript 3.4 之前,声明一个字面量数组将被扩展并且可以修改。 使用 const,我们可以将字面量锁定为其显式值,也不允许修改。

    1.2K10

    TypeScript 3.4 正式发布!

    4} 只读元组:对 readonly 元组的新支持。我们可以用 readonly 关键字为任何元组类型添加前缀,使其成为 readonly 元组,就像用数组的简写语法一样。...readonly 映射类型修饰符readonly数组:会自动把类数组类型转换为相应的 readonly 对应项。 const断言—— 为字面量引入一个名为 const 断言的新构造。...当你使用 const 断言构造新的表达式时,可以给语言发出下面这些信号: 该表达式的字面量类型不应被加宽(例如,不要从 “hello” 到 string) object 字面量获得 readonly...globalThis 提供了一种访问全局范围的标准方法,可以不同环境中使用。 将参数转换为解构对象—— 实现了一个新的重构,将现有函数转换为使用此“命名参数”模式。...存在多个参数的情况下,TypeScript 将提供重构以将参数列表转换为单个解构对象。 可以到官方发布说明了解有关 TypeScript 3.4 所有新功能的更多信息。

    1.4K10

    15个Typescript 5.0 重要的新功能快速了解一下

    ,则必须为其添加 as const: // string[] const a = ["Alice", "Bob", "Eve"] // readonly ["Alice", "Bob", "Eve"]...const b = ["Alice", "Bob", "Eve"] as const TypeScript 5.0 允许您将 const 修饰符添加到类型参数声明: declare function..."a", "b" ,"c"]); 但请记住,const 修饰符仅影响调用编写的对象、数组和原始表达式的推断,因此不会(或不能)用 as const 修改的参数将看不到任何 行为改变: declare...所有枚举都是联合枚举 TypeScript 5.0 ,所有枚举现在都被视为联合枚举。 联合枚举为使用枚举值提供了更好的类型安全性和改进的人体工程学。...--inlineSourceMap:发出的 JavaScript 包含源映射文件。 12. 编辑器区分大小写的导入排序 TypeScript 5.0 通过区分大小写改进了编辑器的导入排序。

    26830

    你应该知道的TypeScript高级概念

    那这种情况下我们可以使用readonly这样一个关键词,去修饰一下这里的summary。那添加readonly过后我们这个summary他初始化完成过后就不能够再去修改了。...而在TypeScript,我们除了可以使用所有ECMAScript的标准当中所有类的功能,他还添加了一些额外的功能和用法,例如我们对类成员有特殊的访问修饰符,还有一些抽象类的概念。...我们需要明确类型取声明他所拥有的一些属性,不是直接在构造函数当中动态通过this去添加。...类的访问修饰符 接下来我们再来看几个TypeScript类的一些特殊用法,那首先就是类当中成员的访问修饰符,类的每一个成员都可以使用访问修饰符去修饰他们。...,说的就是受保护的,我们可以添加一个gender的属性,他的访问修饰符我们就使用protected,我们同样构造函数初始化一下gender。

    50310

    深入学习下 TypeScript 的泛型

    一个字段传递 true 意味着您希望它被返回, false 则意味着您希望它被省略。...这里引用的Readonly的实现只是为了说明的目的。 请注意修饰符 readonly,它作为前缀添加到此代码的 [K in keyof T] 部分。...目前,可以映射类型中使用的两个可用修饰符readonly 修饰符,它必须作为前缀添加到属性,以及 ? 修饰符,可以作为属性的后缀添加。这 ?修饰符将字段标记为可选。...两个修饰符都可以接收一个特殊的前缀来指定是否应该删除修饰符 (-) 或添加 (+)。如果仅提供修饰符,则假定为 +。...TypeScript 仅适用于类型,因此请确保始终将类型声明的标识符读取为类型,不是值。在此代码,您使用每个布尔值的确切类型,true 和 false。

    39K30

    深入学习下 TypeScript 的泛型

    一个字段传递 true 意味着您希望它被返回, false 则意味着您希望它被省略。...这里引用的Readonly的实现只是为了说明的目的。请注意修饰符 readonly,它作为前缀添加到此代码的 [K in keyof T] 部分。...目前,可以映射类型中使用的两个可用修饰符readonly 修饰符,它必须作为前缀添加到属性,以及 ? 修饰符,可以作为属性的后缀添加。这 ?修饰符将字段标记为可选。...两个修饰符都可以接收一个特殊的前缀来指定是否应该删除修饰符 (-) 或添加 (+)。如果仅提供修饰符,则假定为 +。...TypeScript 仅适用于类型,因此请确保始终将类型声明的标识符读取为类型,不是值。在此代码,您使用每个布尔值的确切类型,true 和 false。

    15410

    编写TypeScript工具类型,你需要知道的知识

    由于 friend 成员是对象,上面的 Partial 处理只对第一层添加可选修饰符,假如需要将对象成员内的成员也添加可选修饰符,可以使用 Partial 递归来解决。...如果选择为 id 字段提供添加可选修饰符的话,那就太不明智了。因为删除用户时,即使填写 id 属性也不会报错,这不是我们想要的结果。... JavaScript ,对象可以用属性名获取值,而在 TypeScript ,这一切被抽象化,变成通过索引获取类型。...TypeScript 提供了从旧类型创建新类型的一种方式 。映射类型里,新类型以相同的形式去转换旧类型里每个属性。...文章开头的 Partial 工具类型正是使用这种搭配,为原有的类型添加可选修饰符。 条件类型 语法: T extends U ?

    1.4K50
    领券