TypeScript和Typescript-eslint有重叠的目的吗?

你爱

我正在阅读typescript-eslint文档,并且进入了本节:

TypeScript和ESLint具有相似的目的,
这意味着在某些情况下TypeScript实际上为我们解决了我们以前依赖ESLint的问题。

考虑到它们的定义,一种是静态类型的语言,一种是解析代码并提出一些断言的工具,以确保考虑某些规则和模式,这是完全不同的事情。我想知道可以为该部分提供哪些示例solves a problem for us that we previously relied on ESLint for这两件事有什么共同点吗?它们的相似目的是什么?

樱桃花

因为JavaScript是一种动态类型的语言,所以与使用静态语言的编译器相比,程序员可以更轻松地引入在运行时失败的细微错误和错误,而编译器可以解决常见问题。

以以下代码为例:

console.log(someUndefinedVariable)

const constant = 0
constant = 3

const addOne = n => {
  if (typeof n !== 'nubmer') {
    throw new Error('n must be an number')
    console.log('This will never be executed')
  }
  if (n < 0) console.log('negative number')
  else return n + 1
}
console.log(addOne(-3) * 2)

const symbol = new Symbol()

该代码将在运行时失败,并且还有其他一些可能导致意外结果的问题。

诸如ESLint之类的Linter会使用诸如no-undef和no const-assign之类的规则来解决其中的一些问题

 1:13  error  'someUndefinedVariable' is not defined      no-undef
 4:1   error  'constant' is constant                      no-const-assign
 7:20  error  Invalid typeof comparison value             valid-typeof
 9:3   error  Unreachable code                            no-unreachable
16:20  error  `Symbol` cannot be called as a constructor  no-new-symbol

同样,TypeScript的编译器也会警告您许多这些问题

Cannot find name 'someUndefinedVariable'.

Cannot assign to 'constant' because it is a constant.

This condition will always return 'true' since the types
'"string" | "number" | "bigint" | "boolean" | "symbol" | "undefined" | "object" | "function"'
and '"nubmer"' have no overlap.

Unreachable code detected.

'new' expression, whose target lacks a construct signature, implicitly has an 'any' type.

从这个意义上讲,ESLint和TypeScript具有相同的目标:通过事先警告来防止可能的程序员错误。对于这些问题,您可以关闭相应的ESLint规则,而改用TypeScript编译器。


但是,有关TypeScript的最重要功能是在JavaScript中添加了静态类型。通过将类型注释添加到addOne

const addOne = (n: number): number => { /* ... */ }

TS告诉我们,如果为负数Function lacks ending return statement and return type does not include 'undefined'.则函数将返回undefined而不是n数字。的结果addOne(-3) * 2将是NaN,而不是-4预期的结果。

另一个示例,ESLint完全可以使用,但在运行时失败:

const foo = 0
const bar = foo()
//          ~~~
// This expression is not callable.
//   Type 'Number' has no call signatures.

这些是TypeScript由于其类型系统而可以帮助识别的许多问题中的一些。

另一方面,包括ESLint和typescript-eslint插件在内的linter可以强制执行最佳实践,例如使用严格的相等运算符正确处理promises他们还可以强制执行诸如缩进要求或禁止分号一致的类型声明样式之类的样式约定


TypeScript和ESLint具有防止程序员错误和错误的相似目标。但是,由于类型系统的原因,TypeScript可能会遇到更多的运行时错误和编程错误,而ESLint可以强制采用样式惯例最佳实践

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章