TypeScript ID --isolatedDeclarations禁止使用正则表达式字面量初始化const,

pgvzfuti  于 6个月前  发布在  TypeScript
关注(0)|答案(5)|浏览(71)

🔍 搜索词

  • isolatedDeclarations
  • isolated declaration

✅ 可实现性检查清单

⭐ 建议

我不确定这是个错误还是一个功能请求...
一个导出的 const 没有类型注解,并用正则表达式字面量初始化会触发以下错误 error TS9010: Variable must have an explicit type annotation with --isolatedDeclarations. 在isolated declaration模式下。
如果我理解正确的话,isolated declaration应该允许用任何字面量初始化的未注解的 const?

📃 动机示例

在练习场上查看一个示例。

💻 用例

这可以避免简单的类型注解。

kpbwa7wx

kpbwa7wx1#

这需要我们硬编码正则表达式的类型,对吗?因为正则表达式不是固有的,也不是dts中的有效初始化器。
我想只要那个类型名没有被重复使用,它总是可以是RegExp。这不像"number"或保留类型名的字面值。

vdgimpew

vdgimpew2#

这看起来与任何其他字面类型的情况相同,只是正则表达式字面类型不存在,因此我们可以安全地编写 X: RegExp (是的,除了遮蔽作用)。

kdfy810k

kdfy810k3#

只是希望我们永远不要添加更严格的正则表达式类型...
快速修复至少建议在最新的夜间版本中添加 : RegExp 吗?

sirbozc5

sirbozc54#

这个修复确实有效,所以这个问题主要在于ID是否应该允许这种推断。

watbbzwu

watbbzwu5#

希望我们永远不要添加更严格的正则表达式类型...
#32098 与我们最近的正则表达式解析更改非常接近,但我认为这不会阻止这个功能。每当我们开始发出一个 RegExpWithNamedGroups<["a", "b", "c"]> 或类似的东西,而不是一个普通的 RegExp 类型时,正确的类型仍然可以通过从正则表达式中解析命名捕获组来轻松确定。
另一方面,由于我非常确定一旦我们为这种字面量有更详细的类型,它们实际上可能需要像其他字面量类型一样的行为扩展,所以如果你写

x = /(?<a>a)/
x = /(?<b>b)/

你希望 xRegExp 而不是 RegExpWithNamedGroups<["a"]>,并且在第二次赋值时不会出现错误。无论如何,未来的正确输出将是 : RegExp: RegExpWithNamedGroups<["a"]>(或者它格式化成什么样子)之一,甚至是 = /re raw literal/(如果我们决定确实需要完整的字面量新鲜度),正确的一个应该是从语法和我们当时支持的内容静态确定的。

相关问题