¿Cuándo usar un punto y coma en TypeScript?


Sé que JavaScript (y por lo tanto TypeScript) soporta la omisión de punto y coma en muchos casos. Sin embargo, quiero agregar punto y coma para ser inequívoco como se sugiere en TypeScript Deep Dive

Sin embargo, no puedo encontrar una guía que enumere dónde usar punto y coma. Por ejemplo, mira el siguiente código

class Person {
  private name: string; // A

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

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

Estoy bastante seguro de usar un punto y coma en A. Pero, ¿qué acerca de B, C, D y todos los otros casos no cubiertos por mi ejemplo?

Edit : Debo agregar que no estoy preguntando dónde omitir punto y coma, sino dónde agregarlos. Una respuesta como siempre no satisface mis necesidades ya que no puedo añadir un ; después de public. Quiero saber exactamente dónde poner punto y coma.

Author: Devin G Rhode, 2016-08-08

4 answers

Solo prefije las líneas que comienzan con [, (, o ` con un punto y coma y eres (casi) de oro *

Usando el mismo ejemplo que otra respuesta:

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

Añadimos un punto y coma de acuerdo con esta regla:

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

De lo contrario javascript piensa que estamos tratando de call( alguna función, o reference[ alguna matriz. Esto es más simple, más fácil de seguir y visualmente más fácil de detectar. También necesita punto y coma en for bucles, pero el .forEach método es un más limpio y más fácil método. Diría con confianza que esta regla cubre el 99% de los escenarios que necesita usar un punto y coma en javascript/typescript.

Siguiendo este método, es importante asociar una nueva línea con la terminación de una instrucción.

* Esto devuelve el venerable undefined:

  return 
          7

Después de return, hay una nueva línea, y el navegador inserta un punto y coma, terminando la instrucción de esta manera:

  return; // this will return undefined.
          7

Haga esto en su lugar:

  return (
          7
  )

Javascript es en realidad bastante inteligente con punto y coma, hay un paréntesis abierto, por lo que no se inserta punto y coma hasta que se encuentra el paréntesis de cierre.

Si tienes la costumbre de poner punto y coma en todas partes y no saber exactamente cuándo se necesitan, puedes leer esto para una explicación de varias páginas: http://blog.izs.me/post/2353458699/an-open-letter-to-javascript-leaders-regarding

Admito que la mayoría de la gente todavía sólo basura semi coma al final de cada línea, pero si eres nuevo y justo aprender, este es el mejor enfoque.

 28
Author: Devin G Rhode,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-07-17 22:30:53

TL; DR: Siempre

Tenga en cuenta: mejor prevenir que curar

Probablemente deberías colocarlos todo el tiempo. No necesitas colocarlos para que TypeScript funcione, pero evitarás errores al hacerlo. ASI (Inserción automática de punto y coma) funciona bastante bien la mayor parte del tiempo, pero no siempre. ¿Realmente quieres tener un problema solo porque no pusiste un punto y coma, y sigues pasando por alto el error? (Dependiendo de su IDE, el error podría en realidad ser atrapado). Pero considere este Javascript perfectamente válido.

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

Esto es javascript válido ( y por lo tanto typescript válido). Este código en realidad dará un error. Uncaught TypeError: (intermediate value)(intermediate value) is not a function(…).

Que podría evitarse simplemente colocando un punto y coma después de la primera línea. No lo necesitas allí, y si la siguiente línea no fuera esa línea de función, probablemente funcionaría correctamente. ¿Pero quieres correr ese riesgo? Parece que tomar el riesgo de errores sobre un personaje extra no es vale la pena para mí. Además, después de un tiempo, simplemente te acostumbras a colocar punto y coma al final de una línea de todos modos;

Piensa en tus colegas

Otra razón por la que es posible que desee usarlos todo el tiempo es en el caso de un cambio de código. Es posible que su colega tenga que cambiar su código, y al hacerlo piensa que el ASI seguirá funcionando incluso con su cambio de código. Imagina que este no es el caso, y que su cambio realmente hace que ASI haga algo mal. ¿Realmente vale la pena ese dolor de cabeza para su colega? Si cambia lo suficiente de su código y luego de repente se encuentra con una gran cantidad de errores, podría estar bastante confundido si no sabe la forma exacta en que ASI está trabajando. Podría ahorrarle a un colega potencial un poco de trabajo (innecesario) simplemente poniéndolo en todas partes.

 9
Author: Dylan Meeus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-08 08:14:55

Debe tener cuidado de no agregar puntos y coma inadvertidamente, pero la mejor manera de evitar ese error autoinfligido es no usarlos excepto cuando lo requiera el lenguaje.

Este error es tan probable como el único caso en el que omitir punto y coma podría no capturar su intención real:

For (int i = 0; i

Hay una situación en la que su intención puede ser ambigua, con el estilo inusual de comenzar una línea con una ( o a [ carácter, ya que la nueva línea no termina la instrucción en ese caso. La gran mayoría de las veces es precisamente lo que quieres, es obvio cuando no lo es, y puedes imaginar algunas declaraciones con o sin punto y coma (como mostré anteriormente) que son problemáticas.

No voy a decir que es irracional usar punto y coma porque está tan arraigado en la cultura, pero por favor ignore el miedo irracional que muchos intentan apoyar con una discusión enrevesada e inexacta de ASI o mano loca agitando. Es un dogma puro, amigos.

 7
Author: Rick O'Shea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-16 18:12:18

Al igual que algunos otros lenguajes modernos derivados de la sintaxis C, La sintaxis JavaScript fue diseñada para permitir omitir punto y coma en casi todas las situaciones. Yo diría que usarlas siempre o usarlas nunca*. Para usarlos "nunca" el largo y corto de él es que cada declaración va en una nueva línea y nunca comienza una línea con (, [, o `.

Sin embargo, para usarlos "nunca", definitivamente debería usar un linter como Estándar JavaScript Style o la semi regla incorporada de eslint que se asegurará de que evite las pocas trampas como las siguientes:

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

Lo anterior se interpreta como a = b + c(d + e).foo(); Tenga en cuenta que al seguir la regla anterior y no comenzar una línea con ( esta situación se evita.

Otro ejemplo común es el siguiente:

return
{
     hello: "world"
};

De un vistazo se puede pensar que esto se interpretará como devolver un objeto, pero en realidad se interpreta como return; y el código para definir el el objeto después de la instrucción return es inalcanzable. De nuevo, siguiendo la regla de no comenzar una línea con { esto se evita.


  • *Vale, vale, no nunca, pero casi nunca.
 6
Author: Scott Willeke,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-04 05:57:01