Zasady stosowania nawiasów kątowych w maszynopisie

Jakie są ogólne zasady, które dyktują kiedy, gdzie, jak i dlaczego nawiasy kątowe, tj. "<...>", powinny być używane w maszynopisie?

Chociaż myślę, że rozumiem wiele indywidualnych zastosowań tych nawiasów, trudno mi dostrzec ogólne wzorce ich użycia: czasami wydają się być poprzedzone przed rzeczami, czasami dołączane po rzeczach; czasami są one używane do leków generycznych, czasami do konkretnych typów; czasami pojawiają się tam, gdzie naiwnie oczekiwałem, że coś się stanie. składnia dwukropka do użycia.

Mam dość dobrą znajomość podstaw maszynopisu: ogólnie studiowałem samouczki na stronie głównej maszynopisu, przejrzałem znaczną część specyfikacji maszynopisu, przeczytałem stronę internetową " Definitive TypeScript Guide "i poszedłem za samouczkiem wideo" Mastering TypeScript". Na ten konkretny temat przeszukałem również Google i StackOverflow.

Moim problemem nie jest zrozumienie żadnego konkretnego zastosowania nawiasów kątowych. Raczej, chciałbym aby mieć zwięzłe, ale wyczerpujące / uniwersalne wyjaśnienie, co oznaczają nawiasy, ich dokładną składnię, kiedy powinny być używane, kiedy nie powinny być używane, itp.

UPDATE:

Aktualizuję moje pytanie w odpowiedzi na kilka uwag, aby wyjaśnić, dlaczego zadaję to pytanie i czego dokładnie Szukam.

Pozwolę sobie zilustrować moją prośbę podając przykład czegoś, co robię znam ogólne zasady dla: klamry kręcone w vanilla JavaScript. Klamry kręcone zawsze występują w parze klamry otwierającej i zamykającej, które otaczają jednostkę. Ta istota może być jedną z dwóch głównych "rzeczy".

Po pierwsze, klamry mogą otaczać grupowanie wypowiedzi W:

  • Funkcja, metoda, konstruktor, lub generator,

  • Ciało an if oświadczenie / klauzula lub else klauzula,

  • Body of a for, for/of, for/in, while lub do / while pętla,

  • Body of a try, catch lub finally block, lub

  • Anonimowy blok wypowiedzi.

Po Drugie, nawiasy klamrowe mogą również otaczać listę Z:

  • Właściwości obiektu,

  • Konstruktory, właściwości i / lub metody deklaracji class,

  • Funkcje i / lub stałe mają być exported lub imported z modułu,

  • cases zgodnie z kryterium switch lub

  • enums.

(nie chodzi o to, czy ta lista jest kompletna i/lub poprawna.)

Wyobraź sobie, że ktoś uczy się JavaScript. Do tej pory mogła nauczyć się poprawnie używać nawiasów klamrowych, aby otoczyć blok wypowiedzi, tj. zastosowania w pierwszym zbiorze punktów powyżej. Czasami jednak spotykała się również z kręconymi klamrami wokół rzeczy, które nie są blokiem wypowiedzi, np. {a:1, b:2} i zostały zdezorientowane, ponieważ zawartość tych kręconych szelek nie są wypowiedziami, które można wykonać. Albo, co gorsza, może nawet nie być w stanie wskazać przykładu, którego nie rozumie. Zamiast tego po prostu ma to gryzące uczucie z tyłu jej umysłu, że kod, z którym zetknęła się napisana przez innych ludzi, zawiera kręcone aparaty ortodontyczne używane w Nieznany sposób(choć nie pamięta gdzie). To sprawia, że podejrzewa, że jej obecne zrozumienie, kiedy używać kręconych aparatów ortodontycznych może być niekompletne. Zamiast szukać pojedynczych przykładów, których nie rozumie, chce tylko, aby ktoś podał jej powyższą listę "zasad", w których należy używać kręconych aparatów ortodontycznych.

Więc, ponownie, moje pytanie jest następujące: Czy ktoś może opisać dla mnie jakieś ogólne zasady i / lub szczegółowe zasady, które wyczerpująco opisują użycie nawiasów kątowych w maszynopisie sposób opisałem użycie klamry kręcone w JavaScript powyżej?

Author: Andrew Willems, 2016-05-21

2 answers

Przy takich pytaniach polecam przeczytać spec, szczególnie sekcję gramatyki. Składnia podobna do < something > jest używana w

  1. Parametry Typu

    • zdefiniowane jako < TypeParameterList >w sekcja 3.6.1
    • Używany z deklaracjami i sygnaturami wywołań klas, interfejsów, funkcji i innych

      function heat<T>(food: T): T { return food; }
                //^^^^^ Type parameter list
      
      class Pizza<T, E extends Cheese> { toppingA: T; toppingB: E }
               //^^^^^^^^^^^^^^^^^^^^ Type parameter list
      
  2. Argumenty Typu

    • zdefiniowane jako < TypeArgumentList > w sekcji 3.6.2
    • Używane z odwołaniami do typów generycznych i wywołaniami do funkcji generycznych

      var pizza: Pizza<Pepperoni, Mozzarella>;
                     //^^^^^^^^^^^^^^^^^^^^^^ Type argument list
      pizza = heat<{ toppingA: Pepperoni, toppingB: Mozzarella}>(ingredients) 
                 //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Type argument list
      

      Aktualizacja 2018-07-01: Od wersji 2.9 argumenty typu ogólnego mogą być również używane w szablonach JSX elements i tagged templates .

       <MenuItem<Pizza> toppings={[Pepperoni, Mozzarella]} />
              //^^^^^^^ Type argument list
      
       const ratingHtml = escapeUserInput<string | number> `Customer ${feedback.customer.username} rated this pizza with <b>${feedback.rating}</b>/10!`
                                        //^^^^^^^^^^^^^^^^ Type argument list
      
  3. Twierdzenia Typu

  4. JSX expressions (when enabled)

    • Nie udokumentowane w specyfikacji, ale powinny być zgodne ze składnią JSX , która jest zasadniczo wyrażeniem podobnym do

      <JSXElementName JSXAttributes(optional)> JSXChildren(optional) </JSXElementName>
      

      Lub

      <JSXElementName JSXAttributes(optional) />
      
 26
Author: noppa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-01 15:10:37

Są one używane dla wielu, zdecydowanie zbyt semantycznie odrębnych wyrażeń, aby można było nad nimi sformułować wspólny przypadek użycia. Zależy to również od kontekstu, podobnie jak nawiasy klamrowe. Jak zapewne wiesz, nawiasy kątowe w parach są używane:

  • jako przestarzała składnia twierdzeń typu
  • do ręcznego określania parametrów typu ogólnego
  • do deklarowania elementów w .tsx

Gdy nie ma w pliku .tsx, nawiasy kątowe w parach są praktycznie zawsze wskazanie obecności parametru typu ogólnego. Można sformułować system wyrażeń jako taki (który jest prawdopodobnie najbliżej można uzyskać):

  • Gdy w kontekście definicji typu, adnotacji typu, wywołania metody lub deklaracji klasy, nawiasy kątowe oznaczają ogólny parametr typu
  • W przeciwieństwie do innych elementów, które nie są w pełni kompatybilne ze standardem TSX, nie są w pełni kompatybilne ze standardem TSX/JSX.]}
 1
Author: John Weisz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-21 20:45:28