TypeScript 当无法解析类型时,编译器选项回退到未知而不是任何的选项,

hts6caw3  于 5个月前  发布在  TypeScript
关注(0)|答案(1)|浏览(48)

建议

🔍 搜索词

未知错误代替任何错误

✅ 可实现性检查清单

我的建议满足以下准则:

  • 这不会对现有的TypeScript/JavaScript代码造成破坏性的更改
  • 这不会改变现有JavaScript代码的运行时行为
  • 这可以在不根据表达式的类型发出不同的JS的情况下实现
  • 这不是一个运行时特性(例如库功能、使用JavaScript输出的非ECMAScript语法、JS的新语法糖等)
  • 这个特性将与 TypeScript's Design Goals 的其他部分保持一致。

⭐ 建议

目前,当类型无法解析时,存在由 skipLibCheck 抑制的外部库中的错误,或者由 @ts-expect-error / @ts-ignore 抑制的错误,此时类型会回退到 any。如果有一个编译器选项可以将此行为更改为 unknown 而不是 any,那么这将使这个特性更加有用。

📃 动机示例

目前,@ts-ignore@ts-expect-error 注解在 .d.ts 文件中没有暴露。改变这种功能的一个关注点似乎是可能导致 any 泄漏到代码库中(参见 #38628 (评论))。

💻 用例

  • 使使用 skipLibCheck 更安全,例如如果一个库使用不同版本的typescript编译,导致在你正在使用的版本上出现错误
  • 使使用 @ts-expect-error 稍微更安全
kgsdhlau

kgsdhlau1#

在具有未检查类型的库中,类型错误并非唯一的地方。如果解析被中止(例如,长查找链或由启发式触发的退出),any 最终会被使用。我在Canva源代码中观察到这种情况发生了两次,如果还有更多隐藏的例子,我不会感到惊讶。

相关问题