Was bedeuten eckige Klammern, wo ein Feld in Typoskript sein sollte?

8

Ich bin in drei ds.ts auf diese Zeile gestoßen:

%Vor%

und fragte mich, was es bedeutete.
Ich verstehe, dass dies eine Funktion namens dispatchEvent bedeuten würde, die ein Argument eines Typs mit einem Elementtyp verwendet, aber ich bin mir nicht sicher, was:

%Vor%

bedeutet.

    
trinalbadger587 15.07.2016, 20:13
quelle

3 Antworten

12

Das ist eine Indexsignatur. Aus der Dokumentation von TypeScript:

  
    

Indexierbare Typen haben eine Indexsignatur, die die Typen beschreibt, mit denen wir in das Objekt indizieren können, zusammen mit den entsprechenden Rückgabetypen beim Indizieren.

  

So könnten Sie zum Beispiel eine Schnittstelle für ein indizierbares Objekt wie:

definieren %Vor%

Dies teilt dem Compiler mit, dass für jedes Objekt vom Typ IArrayOfStrings jedes Mitglied, auf das der numerische Index zugreift, vom Typ string ist.

Also wird das ohne Fehler kompiliert:

%Vor%

Aber das wird nicht:

%Vor%

In Ihrem Beispiel diese Zeile:

%Vor%

beschreibt eine Methode dispatchEvent , die einen Parameter vom Typ { type: string; [attachment: string]: any; } akzeptiert.

Um diesen Typ leichter verständlich zu machen, betrachten Sie eine Schnittstelle, die diesen Typ definiert:

%Vor%

Dies teilt dem Compiler mit, dass Objekte vom Typ IEvent eine String-Eigenschaft namens type haben und Elemente eines IEvent -Objekts, auf das vom String-Index zugegriffen wird, vom Typ any type sind.

So etwas würde ohne Fehler kompilieren:

%Vor%     
Seamus 15.07.2016, 21:24
quelle
1

Die Klammern deklarieren eine Index-Signatur, dh neben type , die obligatorisch ist, können Sie alles in das erste Argument einfügen.

Grundsätzlich schwächt dies die Typsicherheit des Arguments. Dieser Mechanismus ist von großem Nutzen, wenn die Funktion nicht selbst ein Konsument ist, sondern eine generische Verknüpfung zwischen Spielern, die eine stärkere Typisierung verwenden (sie werden ein tieferes Wissen über die Ereignisstruktur haben).

Ich habe eine weitere Antwort hinzugefügt, weil die vorhandene Antwort dies als optionales Argument bezeichnet, was nicht der Fall ist. Ein optionales Argument ist mit einem "?" und ganz anders.

    
sgrtho 15.07.2016 21:04
quelle
-2

Jetzt können Sie Dinge mit der neuen Funktion ES6 tun Map :

%Vor%     
Zhenyang Hua 15.03.2017 19:29
quelle

Tags und Links