🔍 搜索词
- isolatedDeclarations
- isolated declaration
✅ 可实现性检查清单
- 这不会对现有的TypeScript/JavaScript代码造成破坏性的改变
- 这不会改变现有JavaScript代码的运行时行为
- 这可以在不根据表达式的类型发出不同的JS的情况下实现
- 这不是一个运行时特性(例如库功能,带有JavaScript输出的非ECMAScript语法,JS的新语法糖等)
- 这不是请求添加一个新的实用类型: https://github.com/microsoft/TypeScript/wiki/No-New-Utility-Types
- 这个特性将与我们设计目标的其他部分保持一致: https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals
⭐ 建议
我不确定这是个错误还是一个功能请求...
一个导出的 const
没有类型注解,并用正则表达式字面量初始化会触发以下错误 error TS9010: Variable must have an explicit type annotation with --isolatedDeclarations.
在isolated declaration模式下。
如果我理解正确的话,isolated declaration应该允许用任何字面量初始化的未注解的 const
?
📃 动机示例
在练习场上查看一个示例。
💻 用例
这可以避免简单的类型注解。
5条答案
按热度按时间kpbwa7wx1#
这需要我们硬编码正则表达式的类型,对吗?因为正则表达式不是固有的,也不是dts中的有效初始化器。
我想只要那个类型名没有被重复使用,它总是可以是RegExp。这不像"number"或保留类型名的字面值。
vdgimpew2#
这看起来与任何其他字面类型的情况相同,只是正则表达式字面类型不存在,因此我们可以安全地编写
X: RegExp
(是的,除了遮蔽作用)。kdfy810k3#
只是希望我们永远不要添加更严格的正则表达式类型...
快速修复至少建议在最新的夜间版本中添加
: RegExp
吗?sirbozc54#
这个修复确实有效,所以这个问题主要在于ID是否应该允许这种推断。
watbbzwu5#
希望我们永远不要添加更严格的正则表达式类型...
#32098 与我们最近的正则表达式解析更改非常接近,但我认为这不会阻止这个功能。每当我们开始发出一个
RegExpWithNamedGroups<["a", "b", "c"]>
或类似的东西,而不是一个普通的RegExp
类型时,正确的类型仍然可以通过从正则表达式中解析命名捕获组来轻松确定。另一方面,由于我非常确定一旦我们为这种字面量有更详细的类型,它们实际上可能需要像其他字面量类型一样的行为扩展,所以如果你写
你希望
x
是RegExp
而不是RegExpWithNamedGroups<["a"]>
,并且在第二次赋值时不会出现错误。无论如何,未来的正确输出将是: RegExp
、: RegExpWithNamedGroups<["a"]>
(或者它格式化成什么样子)之一,甚至是= /re raw literal/
(如果我们决定确实需要完整的字面量新鲜度),正确的一个应该是从语法和我们当时支持的内容静态确定的。