Подтвердить что ты не робот

Когда использовать точку с запятой в TypeScript?

Я знаю, что JavaScript (и, следовательно, TypeScript) во многих случаях поддерживает пропуск точек с запятой. Тем не менее я хочу добавить точки с запятой, чтобы они были однозначными, как предложено в TypeScript Deep Dive

Однако я не могу найти руководство, в котором перечислены, где использовать точку с запятой. Например, посмотрите на следующий код

class Person {
  private name: string; // A

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

  public add = () => {
    return "C";
  }; // C
}; // D

Я уверен, что я использую точку с запятой в A. Но как насчет B, C, D и всех других случаев, не охватываемых моим примером?

Изменить. Я должен добавить, что я не спрашиваю, где опустить точку с запятой, но где их добавлять. Ответ, как всегда, не соответствует моим потребностям, так как я не могу добавить ; после public. Я хочу знать, где именно положить точку с запятой.

4b9b3361

Ответ 1

Просто префиксные строки, начинающиеся с [, (, или `с точкой с запятой, и вы золотой

Используя тот же пример, что и другой ответ:

var x = { xx : "hello", yy : "world"}
(function () {
    console.log("Hello World");
})();

Мы добавляем точку с запятой в соответствии с этим правилом:

var x = { xx : "hello", yy : "world"}
;(function () {

В противном случае javascript считает, что мы пытаемся выполнить call( некоторую функцию или reference[ некоторый массив. Это проще, проще следовать, и визуально легче обнаружить. Вам также нужны точки с запятой в цикле for, но метод .forEach является более простым и понятным способом. Я бы с уверенностью сказал, что это одно правило охватывает 99% сценариев, в которых вам нужно использовать точку с запятой в javascript.

Следуя этому методу, важно связать новую строку с завершением оператора. В приведенном ниже коде возвращается почтенный undefined!

  return 
          7

После возврата есть новая строка, и браузер вставляет точку с запятой, завершая оператор следующим образом:

  return; // this will return undefined.
          7

Сделайте это вместо:

  return (
          7
  )

Javascript на самом деле довольно умный с точками с запятой, есть открытый палец, поэтому точка с запятой не вставлена ​​до тех пор, пока не будет найден закрывающий пар.

Если у вас есть привычка размещать точки с запятой повсюду и не знать точно, когда они нужны, вы можете прочитать это для объяснения на несколько страниц: http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding

Я признаю, что большинство людей по-прежнему просто засоряют полуколоны в конце каждой строки, но если вы новичок и просто учитесь, это лучший подход.

Ответ 2

Вам нужно следить за тем, чтобы вы не случайно добавляли полуколоны, но лучший способ избежать этой самонадеянной ошибки - не использовать их, кроме случаев, требуемых языком.

Эта ошибка так же вероятна, как и единственный случай, когда опускание точек с запятой может не фиксировать ваше фактическое намерение:

для (int я = 0; я < count; я ++);  do()

Есть одна ситуация, когда ваше намерение может быть неоднозначным, с необычным стилем запуска строки с символом ( или [, поскольку новая строка не прекратите утверждение в этом случае. Подавляющее большинство времени это именно то, что вы хотите, это очевидно, когда это не так, и вы можете придумать некоторые заявления с или без точек с запятой (как я показал выше), которые являются проблематичными.

Я не собираюсь говорить, что это нерационально использовать точки с запятой, потому что это настолько укоренилось в культуре, но, пожалуйста, игнорируйте иррациональный страх, который многие пытаются поддержать сокрушенным и неточным обсуждением ASI или безумной рукой. Это чистая догма, друзья.

Ответ 3

TL; DR: Всегда

Имейте в виду: лучше безопасно, чем жалеть

Вы должны, вероятно, разместить их все время. Вам не нужно размещать их для того, чтобы TypeScript работал, но при этом вы избегаете ошибок. ASI (Automatic Semicolon Insertion) работает довольно долго, но не всегда. Вы действительно хотите столкнуться с проблемой только потому, что не ставили точку с запятой, и вы продолжаете игнорировать ошибку? (В зависимости от вашей IDE ошибка может быть поймана). Но рассмотрите этот совершенно правильный Javascript.

 var x = { xx : "hello", yy : "world"}
 (function () {
     console.log("Hello World");
 })();

Это действительный javascript (и, следовательно, действительный typescript). Этот код действительно даст ошибку. Uncaught TypeError: (intermediate value)(intermediate value) is not a function(…).

Кого можно было избежать, просто поставив точку с запятой после первой строки. Вам не нужно это там, и если следующая строка не будет той функциональной линией, она, вероятно, будет работать правильно. Но вы хотите принять этот риск? Похоже, рисковать ошибками за один лишний характер мне не стоит. Кроме того, через некоторое время вы просто привыкаете к тому, чтобы поместить точки с запятой в конец строки;

Подумайте о своих коллегах

Еще одна причина, по которой вы, возможно, захотите использовать их все время, в случае изменения кода. Возможно, ваш коллега изменит ваш код - и при этом думает, что ASI будет продолжать работать даже с его изменением кода. Представьте, что это не так, и что его изменение фактически делает ASI что-то не так. Действительно ли это стоит головная боль для вашего коллеги? Если он меняет достаточно вашего кода, а затем внезапно сталкивается с множеством ошибок, он может быть довольно смущен, если не знает точно, как работает ASI. Вы могли бы сэкономить потенциальному коллеге немало (ненужной) работы, просто поставив их повсюду.

Ответ 4

Как некоторые другие современные языки, полученные из синтаксиса C, Синтаксис JavaScript был разработан, чтобы вы могли опустить точки с запятой практически во всех ситуациях. Я бы сказал, использовать их всегда или использовать их никогда *. Чтобы использовать их "никогда", длинное и короткое из них состоит в том, что каждый оператор переходит на новую строку и никогда не начинает строку с (, [ или `.

Однако, чтобы использовать их "никогда", вам обязательно нужно использовать linter, например JavaScript Standard Style или встроенное полу-правило eslint, которое позволит избежать нескольких ошибок, таких как:

a = b + c
(d + e).foo()

Вышеприведенный интерпретируется как a = b + c(d + e).foo(); Обратите внимание, что, следуя приведенному выше правилу и не начинающему строку с (, эта ситуация предотвращается.

Другим распространенным примером является следующее:

return
{
     hello: "world"
};

С первого взгляда можно подумать, что это будет интерпретироваться как возвращение объекта, но оно фактически интерпретируется как return;, а код для определения объекта после того, как оператор return недостижим. Опять же, следуя правилу не начинать строку с {, этого можно избежать.


  • * Хорошо, хорошо, никогда, но почти никогда.

Ответ 5

TL; DR Используйте их только там, где это требуется на этом языке!

Пожалуйста, прекратите распространять эту бессмыслицу по поводу неясных проблем ASI. Во-первых, даже если это правда (и это не так), вы не используете свой код? Вы не тестируете свой код? Если есть проблема, она не будет компилироваться или она будет сбой во время выполнения в том же месте, так же, сразу, каждый раз.

Помните безумие венгерской нотации? Это подобная глупость для вешалок, которые не хотят верить, что они тратят свое время, загромождая свой код точкой с запятой. Они предпочитают защищать практику, которая ищет лекарство от этого широко распространенного психического расстройства. Решение состоит в том, чтобы прекратить добавлять лишние точки с запятой.

Вопросы вставки с запятой - это ложное повествование, как отмечалось в ручной волне без фактической информации. Через час или около того вы раскаялись в том, что вы упали для теории единорога "используйте точку с запятой".