捕捉打字稿语法错误:if 语句和类方法调用
Posted
技术标签:
【中文标题】捕捉打字稿语法错误:if 语句和类方法调用【英文标题】:Catching typescript syntax errors: if statements and class method calls 【发布时间】:2020-11-09 04:36:28 【问题描述】:我在调试过程中注意到,我最难找到的笨拙错别字是如下结果语句:
if (id = userId) ..
And for class methods:
let result = myClass.doThis;
出于某种原因,VSCode 不会在编译时将这些标记为潜在问题。是否有设置或工具可以警告我此类错误?有时它们很难找到并且花费了我很多时间来追踪,因为它们在您扫描时并不那么明显并且难以搜索。
我知道这些是合法的打字稿语句,但其他一些语言的 UI 会标记条件中的赋值和称为属性的方法,以确保这确实是您想要做的。
【问题讨论】:
使用 linter。带有 typescript 插件的 eslint 是前进的方向,因为 tslint 现在已经贬值了。他们会抓住 if 的情况。但是,您的第二个示例是完全有效且合理的代码,因此我认为没有任何理由对其进行标记。如果类方法不带任何参数并且是同步的,请考虑将其设为属性访问器 我想知道在 let result=myClass.doThis; 中将类方法保存在变量中是多么有用。什么时候有用?如果“doThis”是一个依赖于类的任何其他属性的方法,那么如果没有实例的正确“this”上下文,调用 result() 将不会有多大好处。 好吧,有时你绑定它并传递,或者你正在创建某种适配器,但考虑object.member
的更一般情况,其中object
只是一些属性包。我几乎从不使用this
,除非框架强迫我。无论如何,这些天的 linters 是高度可定制的,我敢肯定有人已经写过这样的规则,但我想除了推荐一个工具之外,我还会给你我的意见,因为好吧......我们正在谈论 linter :跨度>
谢谢。实际上让 ESLint 工作有困难,但我会继续摆弄。
【参考方案1】:
继@aluan-haddad 的 cmets 之后。
ESLint 有一条规则可以防止您的第一个问题 (if (id = userId) ...
):
no-cond-assign
.
您的第二个问题 (let result = myClass.doThis;
) 在没有更多信息的情况下很难说出最佳的 lint 规则。
就其本身而言,该代码没有任何问题 - 您已经将(我假设是)一个函数分配给了一个变量。
捕获此问题的一个选项可能是来自@typescript-eslint
的unbound-method
规则。但是,如果您使用自动绑定箭头函数方法,则此规则不会捕获任何内容。
如果您遇到从函数返回值的问题,那么 TS 应该主要为您处理这个问题。一种确保方法是通过以下@typescript-eslint
规则之一为您的函数强制执行严格的合同:
explicit-function-return-type
explicit-module-boundary-types
如果您遇到if (myClass.doThis) ...
之类的问题,请查看此答案中的建议:https://***.com/a/63183129/3736051
【讨论】:
以上是关于捕捉打字稿语法错误:if 语句和类方法调用的主要内容,如果未能解决你的问题,请参考以下文章
使用带有 lit-html 的打字稿编写测试时出现“语法错误:无法在模块外使用 import 语句”