建议
🔍 搜索词
默认情况下,const模式,使用const,作为const
✅ 可实现性检查清单
我的建议满足以下准则:
- 这不会对现有的TypeScript/JavaScript代码造成破坏性的更改
- 这不会改变现有JavaScript代码的运行时行为
- 这可以在不根据表达式的类型发出不同的JS的情况下实现
- 这不是一个运行时特性(例如库功能、JavaScript输出的非ECMAScript语法、JS的新语法糖等)
- 这个特性将与TypeScript's Design Goals的其他部分保持一致。
⭐ 建议
可选的const mode
,可以通过tsconfig
或cli选项手动启用,或者可能是一个"use const"
指令。
在const模式下,默认情况下选择性地将js字面量(如所有原始字面量,通常为数组)设置为as const
,例如:
'use const'
const bool = true // typeof bool is `true` instead of `boolean`
const foo = 'foo' // typeof foo is `foo` instead of `string`
const num = 0 // 0, instead of `number`
const tuple = [ 'foo', true ] // typeof tuple is readonly [ 'foo', true ]
const record = { 'foo': 'bar', 'bar': 0 } // typeof record is { 'foo': 'bar', 'bar': 0 }
或者一些替代指令:
'use const string'
'use const primitive'
'use const Array'
'use const Object'
当需要非const类型时:
'use const'
let bool = true // suggested optionally: const mode can be disabled for `let`.
const arr: string[] = [ 'foo', 'bar' ] // manually declare the type
📃 动机示例
字面量,特别是原始字面量分配给常量变量,通常在其整个生命周期中都有很好的机会保持原样。在重视类型安全的项目中,默认应用as const
可以进一步提高类型安全性和便利性。
💻 用例
实际上减少as const
的类型。
4条答案
按热度按时间zte4gxcn1#
$x^{1m0n1} x$字符串,布尔值和数字已经被当作文字处理。
游戏场
2w3kk1z52#
const
字符串、布尔值和数字已经被视为字面量。Playgroud
这非常酷。尽管我真正想要的是将
as const
默认应用于数组字面量和对象字面量。xzv2uavs3#
我希望这是严格模式选项之一:当分配给一个
const
变量或一个readonly
成员时,编译器应该推断出as const
应该被应用。老实说,我有点希望有一种方法可以在整个语言中翻转可变性默认设置(也许引入一个
mut
关键字来选择在特定情况下使用可变性),但这不太可能发生。我会接受这个!ia2d9nvy4#
这看起来与#42357相似。