TypeScript最佳实践:是否使用noImplicitAny

我应该使用noImplicitAny TypeScript编译器标志吗?

noImplicitAny编译器选项所作的,基本上是将TypeScript从可选类型语言转换为强制类型检验语言。这使得TypeScript离JavaScript的超集稍微远了一些,由于简单的:javascript

function logMe(x) {
  console.log(x);
}
// error TS7006: Parameter 'x' implicitly has an 'any' type.

也将报错——你必须明确声明x的类型为any:java

function logMe(x: any) {
  console.log(x);
}
 // OK

这意味着,若是你要把现有的JS代码库迁移到TS,那除了更改文件扩展名,你还得作一些较复杂的东西。这还意味着,在编写代码时,您须要更多地关注类型,若是不指定类型,编译器就老是会「抱怨」。因为在实际状况中显式地声明any被认为是很差的实践,因此在开发过程的早期,您就须要分配正确的类型。若是没有显式的声明,这可能意味着「我太懒了,没有正确地注释这里的类型」。code

这样子究竟是好是坏是有很大争议的,社区在这个问题上彷佛存在分歧。下面是一些业界领先的TypeScript项目,以及它们是否使用了noImplicitAny编译器标志:ip

Project Uses noImplicitAny
Angular YES
RxJS YES
VSCode NO
Babylon.js NO

接下来下面是个人观点:咱们使用TypeScript,是由于类型提供了有意义的额外信息,能够做为文档、并在早期捕获错误。若是想在项目的代码中都享受这种益处,那就不该该只在某个地方添加类型——把它们添加到任何地方,就能够完成了。ci

不然你就有可能作出以下额外的思考:开发

“嗯,我应该在这里添加类型吗?我有点懒,但这很好,但我还有其余工做要作……「咱们明天再作吧。」

所以,个人建议是将noImplicitAny设置为true文档

相关文章
相关标签/搜索