TypeScript 建议:添加一个"const mode",其中const默认为字面量,

vohkndzv  于 6个月前  发布在  TypeScript
关注(0)|答案(4)|浏览(54)

建议

🔍 搜索词

默认情况下,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的类型。

zte4gxcn

zte4gxcn1#

$x^{1m0n1} x$字符串,布尔值和数字已经被当作文字处理。

游戏场

2w3kk1z5

2w3kk1z52#

const 字符串、布尔值和数字已经被视为字面量。
Playgroud
这非常酷。尽管我真正想要的是将 as const 默认应用于数组字面量和对象字面量。

xzv2uavs

xzv2uavs3#

我希望这是严格模式选项之一:当分配给一个 const 变量或一个 readonly 成员时,编译器应该推断出 as const 应该被应用。
老实说,我有点希望有一种方法可以在整个语言中翻转可变性默认设置(也许引入一个 mut 关键字来选择在特定情况下使用可变性),但这不太可能发生。我会接受这个!

ia2d9nvy

ia2d9nvy4#

这看起来与#42357相似。

相关问题