Typescript 什么时候使用分号合适?

Typescript 什么时候使用分号合适?,typescript,coding-style,Typescript,Coding Style,我知道JavaScript(以及TypeScript)在很多情况下支持省略分号。尽管如此,我还是想添加分号,使之明确,如中所建议的那样 但是,我找不到一个指南列出在哪里使用分号。例如,看下面的代码 class Person { private name: string; // A constructor(name: string) { this.name = name; }; // B public add = () => { return "C";

我知道JavaScript(以及TypeScript)在很多情况下支持省略分号。尽管如此,我还是想添加分号,使之明确,如中所建议的那样

但是,我找不到一个指南列出在哪里使用分号。例如,看下面的代码

class Person {
  private name: string; // A

  constructor(name: string) {
    this.name = name;
  }; // B

  public add = () => {
    return "C";
  }; // C
}; // D
我很确定在a处使用分号。但是B、C、D和我的例子中没有涉及的所有其他情况呢

我不是问在哪里省略分号,而是问在哪里添加分号。像always这样的答案无法满足我的需求,因为我无法添加
公开之后
。我想知道分号的确切位置。

TL;医生:总是这样 记住:安全总比后悔好

你可能应该一直放着它们。您不需要按TypeScript的工作顺序放置它们,但这样做可以避免错误。ASI(自动分号插入)在大多数情况下都能很好地工作,但并不总是如此。你真的想仅仅因为没有放分号,而忽略了错误而遇到问题吗?(根据您的IDE,可能会发现错误)。但是考虑一下这个完全有效的JavaScript。< /P>
 var x = { xx : "hello", yy : "world"}
 (function () {
     console.log("Hello World");
 })();
这是有效的javascript(,因此也是有效的typescript)。这段代码实际上会给出一个错误<代码>未捕获类型错误:(中间值)(中间值)不是函数(…)

这可以通过在第一行后面加一个分号来避免。您不需要它,如果下一行不是功能行,它可能会正常工作。但你想冒这个险吗?我觉得为多出一个角色而冒险犯错误是不值得的。另外,过了一段时间,你就习惯了在一行的末尾加分号

想想你的同事
您可能希望一直使用它们的另一个原因是在代码更改的情况下。您的同事可能必须更改您的代码-这样做会认为ASI即使在代码更改的情况下也会继续工作。想象一下,情况并非如此,他的改变实际上让阿西做错了什么。这真的值得让你的同事头疼吗?如果他对您的代码做了足够多的更改,然后突然遇到许多错误,如果他不知道ASI的确切工作方式,他可能会感到相当困惑。你可以把潜在的同事放在任何地方,这样就可以省下很多(不必要的)工作

您需要注意不要无意中添加分号,但避免这种自作自受的错误的最好方法是,除非语言需要,否则不要使用分号

此错误很可能是唯一一个省略分号可能无法捕获您实际意图的情况:

对于(int i=0;i 有一种情况下,您的意图可能模棱两可,以[字符,因为在这种情况下,换行符不会终止语句。绝大多数情况下,它正是您想要的,当它不是时,这是显而易见的,并且您可以想象一些有或没有分号的语句(如我上面所示)是有问题的

我不会说使用分号是不合理的,因为分号在文化中根深蒂固,但请忽略许多人试图通过对ASI或疯狂挥手的复杂而不准确的讨论来支持的非理性恐惧。朋友们,这纯粹是教条。

只是以
[
开头的前缀行(
,或`加上分号,你(几乎)是金色的* 使用与另一个答案相同的示例:

var x = { xx : "hello", yy : "world"}
(function () {
    console.log("Hello World");
})();
我们根据此规则添加分号:

var x = { xx : "hello", yy : "world"}
;(function () {
否则javascript认为我们正在尝试调用(某个函数,或
引用)[
一些数组。这更简单,更容易遵循,而且在视觉上更容易发现。对于
循环,你也需要在
中使用分号,但这个方法更干净、更简单。我可以自信地说,这一规则涵盖了在javascript/typescript中使用分号的99%的场景

按照此方法,将换行符与终止语句关联起来非常重要。

*这将返回未定义的可尊敬的
:
return之后,有一个换行符,浏览器插入一个分号,终止语句,如下所示:

  return; // this will return undefined.
          7
改为这样做: Javascript使用分号实际上非常灵活,有一个打开的paren,因此在找到结束paren之前不会插入分号

如果你有一个习惯,把分号放在各处,而不知道确切的时间需要分号,你可以阅读以下几页的解释:

我承认大多数人还是会在每一行的末尾加上分号,但是如果你是新来的,而且刚刚开始学习,这是更好的方法。

像一些从C语法派生出来的方法一样,允许你在几乎所有情况下省略分号。我会说总是使用分号或从不使用分号*。使用“从不”它的长短不一之处在于,每一个语句都在一个新行上,从不以
[
,或
`

但是,要使用“从不”,您肯定应该使用linter(如或eslint)和its来禁用分号和its,这将确保您避免以下几个问题:

a = b + c
(d + e).foo()
return
{
     hello: "world"
};
以上解释为
a=b+c(d+e).foo();
注意,通过遵循上述规则并且不以
开头的行(
可以防止这种情况

另一个常见的例子如下:

a = b + c
(d + e).foo()
return
{
     hello: "world"
};
乍一看,人们可能认为这将被解释为返回一个对象,但实际上它被解释为
return;
,并且在return语句之后定义对象的代码是不可访问的。同样,通过遵循不以
{
开头的规则,这是可以避免的


  • *好,好