Reglas para el uso de corchetes angulares en mecanografiado

¿Cuáles son las reglas generales que dictan cuándo, dónde, cómo y por qué paréntesis angulares, es decir?"<...>", ¿debería usarse en TypeScript?

Si bien creo que entiendo muchos usos individuales de estos corchetes, me resulta difícil ver patrones generales para su uso: a veces parecen estar antepuestos antes de las cosas, a veces añadidos después de las cosas; a veces se usan para genéricos, a veces para tipos específicos; a veces aparecen donde podría haber esperado ingenuamente que se usara la sintaxis de colon.

Tengo una comprensión razonablemente buena de los conceptos básicos de TypeScript: en general, estudié los tutoriales de la página de inicio de TypeScript, revisé partes significativas de la especificación de TypeScript, leí el sitio web "Guía definitiva de TypeScript" y seguí un video de "Dominar TypeScript" tutorial. Sobre este tema en particular, también he buscado en Google y StackOverflow.

Mi problema no es tanto comprender un uso particular de los corchetes angulares. Más bien, me gustaría tener una explicación concisa pero exhaustiva / universal de lo que significan los corchetes, su sintaxis exacta, cuándo deben usarse, cuándono deberia&nbsp;ser utilizado, etc.

ACTUALIZAR:

Estoy actualizando mi pregunta en respuesta a algunos comentarios para aclarar por qué estoy haciendo esta pregunta y qué es exactamente lo que estoy buscando.

Permítanme ilustrar mi solicitud dando un ejemplo de algo que yohacer&nbsp;Conozca las reglas generales para: llaves en JavaScript vainilla. Las llaves siempre vienen en un par de llaves de apertura y cierre que rodean a una entidad. Esa entidad puede ser una de las dos 'cosas' principales.

Primero, las llaves pueden rodear unagrupación de declaraciones&nbsp;en:

el cuerpo de una función, método, constructor o generador,

el cuerpo unif&nbsp;declaración / cláusula oelse&nbsp;cláusula,

el cuerpo de unfor, for/of, for/in, while&nbsp;odo/while&nbsp;lazo,

el cuerpo de untry, catch&nbsp;ofinally&nbsp;bloquear o

Un bloque anónimo de declaraciones.

En segundo lugar, las llaves también pueden rodear unlista&nbsp;de:

propiedades de un objeto literal,

constructores, propiedades y / o métodos de unclass&nbsp;declaración,

funciones y / o constantes para serexported oimported desde un módulo,

cases siguiendo aswitch&nbsp;criterio, o

enums.

(Si esta lista está completa o no es correcta o no, no es el punto).

Ahora imagine a alguien aprendiendo JavaScript. Hasta ahora, ella podría haber aprendido correctamente cómo usar llaves para rodear un bloque de declaraciones, es decir, los usos en el primer conjunto de puntos anteriores. Sin embargo, puede que ocasionalmente también haya encontrado llaves alrededor de cosas que no son un bloque de declaraciones, p.{a:1, b:2}&nbsp;y se han confundido porque el contenido de esas llaves no son declaraciones que se puedan ejecutar. O, lo que es peor, es posible que ni siquiera sea capaz de señalar un ejemplo que no entienda. En cambio, solo tiene esta sensación de roer en el fondo de su mente de que el código que ha encontrado escrito por otras personas contiene llaves que se usan de maneras desconocidas (aunque no puede recordar dónde). Esto la hace sospechar que su comprensión actual de cuándo usar llaves se puede completar. En lugar de tratar de encontrar ejemplos individuales que no comprende, solo quiere que alguien le dé la lista anterior de "reglas" sobre dónde usar llaves.

Entonces, una vez más, mi pregunta es la siguiente: ¿Alguien puede describirme algunos principios generales y / o reglas específicas que describan exhaustivamente el uso de corchetes angulares en TypeScript de la forma en que describí el uso de llaves en JavaScript arriba?