const 断言 1const x = { text: "hello" } as const; 官方文档中给出了这样的解释: TypeScript 3.4 引入了一个名为 const 断言的字面值的新构造...它的语法是一个类型断言,用 const 代替类型名称(例如 123 as const)断言构造新的文字表达式时,我们可以向语言发出以下信号: 该表达式中的字面类型不应被扩展(例如:不能从“hello”转换为字符串...) 对象字面量获取只读属性 数组文字成为只读元组 感觉有点枯燥,还有点混乱。...用新的 const 功能,我可以这样做: 1let y = 'x' as const; // y has type 'x'` 对象字面量获取只读属性 在 Typescript 3.4 之前,类型扩展发生在对象字面量中...数组字面量成为只读元组 在 TypeScript 3.4 之前,声明一个字面量数组将被扩展并且可以修改。 使用 const,我们可以将字面量锁定为其显式值,也不允许修改。
使代码更具可读性:as const 创建的对象能使代码更加清晰,明确表示该对象是只读的。...示例代码 typescript复制代码 const person = { name: "Alice", age: 30, } as const; // person.name = "Bob";...可以与对象展开语法结合使用:可以创建一个新对象,该对象是现有对象的副本,但其中一些属性使用 as const 声明为只读。...// 将 age 属性标记为只读 }; // newPerson.age = 35; // 这会导致错误,因为 age 是只读 深层对象的情况 对于深层对象,as const 也能保证其所有嵌套属性为只读...是一个多功能工具,能够提升 TypeScript 代码的质量、可靠性和可维护性。
在 TypeScript 中,as const 是一种类型断言的用法,它用于告诉编译器将某个位置的类型视为一个常量(const)类型。...,config 对象被断言为 as const,这意味着它的属性 apiEndpoint 和 timeout 被推断为只读属性。...as const 是 TypeScript 中的一种类型断言语法,用于将表达式断言为只读(readonly)的字面量类型。...示例: const person = { name: 'Alice', age: 30, } as const; // person 变量被断言为只读的字面量类型 // 因此,尝试修改其属性会导致编译错误...常量对象: 将对象字面量断言为只读的字面量类型,以确保它们在后续代码中不被修改。 2. 常量数组: 将数组字面量断言为只读的字面量类型,以确保数组元素不被修改。 3.
什么是类型断言 类型断言是可以手动指定一个值得类型 类型断言 let num3:number|string="10" num3=20 console.log(num3.length) 通过如上代码,当我们获取...length的时候会报错因为我们赋值为20所以不存在属性length,那么我们就可以采用类型断言去做处理 值 function getAssert(name:string|number) {...name:string|number) { return (name as string).length; } 因为只有在我们为string类型的时候才有length属性,所以这一块我们要采用类型断言的方式进行处理...通过如下代码我们可以发现会出现异常正如下方图片所示,因为他并非是强制类型转换,他只能断言联合类型中存在的类型.不存在的类型是不允许的. function getAssert(name:string|number
答案是有的,就是使用 TypeScript 2.0 提供的非空断言操作符: function sayHello(name: string | undefined) { let sname: string...(b); 虽然在 TS 代码中,我们使用了非空断言,使得 const b: number = a!...; 语句可以通过 TypeScript 类型检查器的检查。但在生成的 ES5 代码中,! 非空断言操作符被移除了,所以在浏览器中执行以上代码,在控制台会输出 undefined。...三、非空断言操作符使用示例 在以下示例中,首先我们使用 TypeScript 类型别名定义了一个 ListNode 类型,用于表示链表节点。...在 TypeScript 实际项目的开发过程中,除了使用非空断言(!)之外,读者还可以使用 TypeScript 3.7 版本中新引入的可选链运算符(?.)和空值合并运算符(??)
as const 是 TypeScript 中的一个用于修饰符,它可以被用来修改类型推断的行为。...当 as const 修饰符用在变量声明或表达式的类型上时,它会强制 TypeScript 将变量或表达式的类型视为不可变的(immutable)。...例如: const foo = ['a', 'b'] as const; foo.push('c'); // TypeScript 会报错,因为 foo 类型被声明为不可变的 const bar =...{ x: 1, y: 2 } as const; bar.x = 3; // TypeScript 会报错,因为 bar 类型被声明为不可变的 as const 修饰符还可以用来修改对象字面量和数组字面量的类型推断...在这种情况下,as const 会强制 TypeScript 将对象字面量或数组字面量的类型推断为不可变的,即使没有显式地指定类型。
---- 类型断言 类型断言使我们可以覆盖 TypeScript 为存储位置计算的静态类型,这对于解决类型系统的限制很有用。...1const data: object = ['a', 'b', 'c']; // (A) 2 3// @ts-ignore: Property 'length' does not exist on type...在 C 行中,我们用类型断言(运算符 as)告诉 TypeScript data 是一个Array。现在就可以访问属性 .length 了。 类型断言是不得已的方法,应尽可能的避免。...TypeScript 的类型必须能够分配给注释的类型。...类型断言的替代语法 TypeScript 对于类型断言有另一种“尖括号”语法: 1>data 该语法已经过时,并且与 React JSX 代码(在 .tsx 文件中)不兼容。
类型断言的用途 将一个联合类型断言为其中一个类型 之前提到过,当 TypeScript 不确定一个联合类型的变量到底是哪个类型的时候,我们只能访问此联合类型的所有类型中共有的属性或方法: interface...需要注意的是,类型断言只能够**「欺骗」**TypeScript 编译器,无法避免运行时的错误,反而滥用类型断言可能会导致运行时错误: interface Cat { name: string;...Fish 了,而 TypeScript 编译器信任了我们的断言,故在调用 swim() 时没有编译错误。...类型断言 vs 类型转换 类型断言只会影响 TypeScript 编译时的类型,类型断言语句在编译结果中会被删除: 意思就像是开了后门,本来是“错的”,让通过了!...Cat; 等价于 const tom: Cat = getCacheData('tom'); 知道了它们的核心区别,就知道了类型声明是比类型断言更加严格的。
const assertions - TypeScript 3.4 // vue3 const dnsProviders = { "aliyun.com": "alidns", "...解决这个问题使用, 需要使用 typescript 中 const assertion 类型推断。 const assertion 类型推断。 字面量类型推断: 其类型为字面值类型。...1 as const // type 1 object 得到的是一个只读属性 let z = { text: "hello" } as const; // // Type '{ readonly...text: "hello" }' 数组 array 得到一个 只读元组 (tuple) let y = [10, 20] as const; // Type 'readonly [10, 20]'...(0 as const) : (1 as const); let d = 3_600_000 as const; const 上下文执行的时候, 并不会立即将 一个可变表达式 转换成 完全不可变的 状态
#前言索引签名和只读属性是TypeScript中的两个重要概念。索引签名允许您创建动态属性的对象,提高灵活性,而只读属性通过 "readonly" 关键字确保属性不可被修改,有助于保持对象的不可变性。...}let arr: stringArray = ['a', 'b', 'c'];console.log(arr[0]);console.log(arr[1]);console.log(arr[2]);只读属性概述让对象属性只能在对象刚刚创建的时候修改其值在只读属性限定前面添加...Jonathan', lastName: 'Lee'};myName.lastName = 'Wang';console.log(myName);TS 内部对只对属性进行了扩展,扩展出来了一个 只读数组
https://mariusschulz.com/blog/const-assertions-in-literal-expressions-in-typescript 这篇文章讲述了 TypeScript...3.4 提供的一个功能 const 断言,这个功能解决了我以前遇到过的一个问题(axios 定义的 method 就是 "GET" | "POST",不知道现在他们改了么)。...TypeScript 对于类型推断有它自己的一套原则,当你定义了一个封装,如下一个场景就能还原这个问题: function fetchJSON(url: string, method: "GET" |...; 这是使用 const 关键字的特殊类型: 文字表达式中的文字类型都不会扩展 对象属性只读 数组变成只读的元组 由于变成了只读,如果你还想给 HTTPRequestMethod 分配新的值时,TS编译器是会给出错误的...最后结论: 例如,您可以定义一个ORIGIN变量来描述二维空间中的原点,如下所示: const ORIGIN = { x: 0, y: 0 } as const; 这等同于(并且比以下声明更简洁
只读属性 顾名思义就是这个属性是不可写的,对象属性只能在对象刚刚创建的时候修改其值。...你可以在属性名前用 readonly来指定只读属性,如下所示: interface User { readonly loginName: string; password: string...readonly vs const 最简单判断该用readonly还是const的方法是看要把它做为变量使用还是做为一个属性。 做为变量使用的话用const,若做为属性则使用readonly。
TypeScript 是什么 TypeScript 是 JavaScript 的超集 ?...只读属性加 readonly 函数(value: type) => returType 会有额外的属性 [propName: string]: any #使用 function getPerson(person...比如,我们需要实现一个函数 reverse,输入数字 123 的时候,输出反转的数字 321,输入字符串 'hello' 的时候,输出反转的字符串 'olleh'。...#类型断言的限制 联合类型可以被断言为其中一个类型 父类可以被断言为子类 任何类型都可以被断言为 any any 可以被断言为任何类型 要使得 A 能够被断言为 B,只需要 A 兼容 B 或 B 兼容...官方文档 TypeScript Doc(官方文档&英文版) TypeScript Handbook(中文版) Typescript 入门教程 深入理解TypeScript 1.2W字 | 了不起的 TypeScript
name:'b',opts:'123'}) func({opts:'1234'}) //报错 // 通过结构给默认值 function func2({name,opts=''}: MyType){} 只读属性...interface MyType { readonly prop: string } const obj = {prop:'a'} obj.prop = 'b' //报错 注:相同形状的类型可以兼容...readonlyObj.prop = 'c' // 报错 索引签名 索引的类型只能是number或string interface StringArray { [ index: number]: string } const...props: string]: number, length: number // 类型必须与索引类型兼容,例如需要定义string属性,那么索引的值类型必须是number | string } const
对只读数组和只读元组的改进 —— 使用只读数组类型更容易一些: 只读数组的新语法:使用新的数组类型的 readonly 修改器。...4} 只读元组:对 readonly 元组的新支持。我们可以用 readonly 关键字为任何元组类型添加前缀,使其成为 readonly 元组,就像用数组的简写语法一样。...const断言—— 为字面量引入一个名为 const 断言的新构造。它的语法是用 const 代替类型名称的类型断言(例如123 as const)。...当你使用 const 断言构造新的表达式时,可以给语言发出下面这些信号: 该表达式中的字面量类型不应被加宽(例如,不要从 “hello” 到 string) object 字面量获得 readonly...在存在多个参数的情况下,TypeScript 将提供重构以将参数列表转换为单个解构对象。 可以到官方发布说明了解有关 TypeScript 3.4 所有新功能的更多信息。
,这是因为类型断言会让 TypeScript 编译器将变量当做指定的类型,而不管它实际的类型,在程序运行时可能有类型错误,断言需要慎用。...let anyValue:any = 'zhangsan';let length:number = (anyValue as string).length;//0断言类型(1)非空断言含义:非空断言用!...(); }这里出一个面试题,如下:// 面试题 const a: number | undefined = undefined;const b: number = a!...;//这里使用断言无效,a已经有明确的值console.log(b);// 上面的代码会编译成const a = undefined;const b = a;console.log(b); // undefined...19;我们可以改成这样就不会报错啦const obj:Object = {};(obj).name = 'zhangsan';(obj).age = 19;(4)调用函数时将参数和返回值断言成精确的值
只读数组,const 断言 JavaScript 规定,const命令声明的数组变量是可以改变成员的。...原因就是只读数组是数组的父类型,父类型不能替代子类型。这个问题的解决方法是使用类型断言getSum(arr as number[]),详见《类型断言》一章。...实际上,TypeScript 提供了两个专门的泛型,用来生成只读数组的类型。...只读数组还有一种声明方法,就是使用“const 断言”。...const arr = [0, 1] as const; arr[0] = [2]; // 报错 上面示例中,as const告诉 TypeScript,推断类型时要把变量arr推断为只读数组,从而使得数组成员无法改变
; 唯一的区别是 as const 将使数组只读,这在我看来是可取的。...假设我们要将名为 Teacher 的实体的所有属性转换为只读。我们可以使用什么实用程序? 我们可以使用 Readonly 实用程序类型。...让我们反转 Readonly 类型以创建一个 Writable 类型: interface Teacher { readonly name: string; readonly email: string...这些基本上是断言——就像任何给定类型的函数一样。 我们如何使用它们?我们只需要定义一个函数,它的返回类型是一个类型谓词,它返回true/false。...该断言函数将成为我们的类型保护。 类型保护是有作用域的。在 isHunter(x) 代码块中,x 变量的类型为 Hunter。这意味着我们可以安全地调用它的hunt 方法。
前言TypeScript 中的 "never" 类型表示一个永远不会发生正常结束的函数返回值类型,通常在异常处理或无限循环中使用。这有助于标识代码中的潜在问题和错误流程。"...Object 类型表示一个对象let obj: object;// 会报错// obj = 123;obj = {name: "BNTang", age: 18};console.log(obj);类型断言概述...TS 中的类型断言和其它编程语言的 类型转换 很像,可以将一种类型强制转换成另外一种类型类型断言就是告诉编译器, 你不要帮我们检查了, 相信我,我知道自己在干什么例如:我们拿到了一个 any 类型的变量...,但是我们明确的知道这个变量中保存的是 字符串 类型,此时我们就可以通过类型断言告诉编译器, 这个变量是一个字符串类型, 此时我们就可以通过类型断言将 any 类型转换成 string 类型, 使用字符串类型中相关的方法了方式一...let str: any = "yby6";let len = (str).length;console.log(len);方式二在企业开发中推荐使用 as 来进行类型转换(类型断言)因为第一种方式有兼容性问题
领取专属 10元无门槛券
手把手带您无忧上云