Vorwort: Die offizielle Dokumentation von Diese Übersetzung wurde aus dem Kapitel „Zugeordnete Typen“ im TypeScript-Handbuch zusammengestellt. Dieser Artikel ist nicht streng dem Originaltext entsprechend übersetzt, es werden jedoch einige Erklärungen und Ergänzungen bereitgestellt. 1. Zugeordnete TypenManchmal muss ein Typ auf einem anderen Typ basieren, Sie möchten aber keine Kopie erstellen. In diesem Fall können Sie die Verwendung eines Zuordnungstyps in Betracht ziehen. Zuordnungstypen basieren auf der Syntax von Indexsignaturen. Sehen wir uns zunächst die Indexsignaturen an: // Wenn Sie den Typ der Eigenschaft im Voraus deklarieren müssen, geben Sie OnlyBoolsAndHorses = { ein. [Schlüssel: Zeichenfolge]: Boolesch | Pferd; }; const entspricht: OnlyBoolsAndHorses = { del: wahr, rodney: falsch, }; Der Zuordnungstyp ist ein generischer Typ, der Typ OptionsFlags<Typ> = { [Eigenschaft im Keyof-Typ]: Boolean; }; In diesem Beispiel iteriert Typ FeatureFlags = { dunkler Modus: () => ungültig; neuesBenutzerprofil: () => void; }; Typ FeatureOptions = OptionsFlags<FeatureFlags>; // Typ FeatureOptions = { // Dunkelmodus: Boolesch; // neuesBenutzerprofil: boolean; // } 2. Mapping-ModifikatorenBei Verwendung eines zugeordneten Typs können zwei zusätzliche Modifikatoren verwendet werden: einer ist „readonly“, mit dem die Eigenschaft auf schreibgeschützt festgelegt wird, und der andere ist „?“, mit dem die Eigenschaft auf optional festgelegt wird. Sie können diese Modifikatoren entfernen oder hinzufügen, indem Sie ihnen - oder + voranstellen. Wenn kein Präfix angegeben ist, entspricht dies der Verwendung des Präfixes +. // Lösche den schreibgeschützten Attributtyp im Attribut CreateMutable<Type> = { -readonly [Eigenschaft im Schlüssel des Typs]: Typ[Eigenschaft]; }; Typ GesperrtesKonto = { schreibgeschützte ID: Zeichenfolge; schreibgeschützter Name: Zeichenfolge; }; Typ UnlockedAccount = CreateMutable<LockedAccount>; // Typ UnlockedAccount = { // ID: Zeichenfolge; // Name: Zeichenfolge; // } // Lösche das optionale Attribut type im Attribut Concrete<Type> = { [Eigenschaft im Schlüssel des Typs]-?: Typ[Eigenschaft]; }; Typ VielleichtBenutzer = { ID: Zeichenfolge; Name?: Zeichenfolge; Alter?: Zahl; }; Typ Benutzer = Konkret<VielleichtBenutzer>; // Typ Benutzer = { // ID: Zeichenfolge; // Name: Zeichenfolge; //Alter: Zahl; // } 3. Tastenbelegung über as In Typ MappedTypeWithNewProperties<Typ> = { [Eigenschaften im Schlüssel des Typs als NewKeyType]: Typ [Eigenschaften] } Sie können beispielsweise Template Literal Types verwenden, um einen neuen Eigenschaftsnamen auf Grundlage eines vorherigen Eigenschaftsnamens zu erstellen: Typ Getter<Typ> = { [Eigenschaft im Schlüssel des Typs als `get${Capitalize<string & Property>}`]: () => Typ[Eigenschaft] }; Schnittstelle Person { Name: Zeichenfolge; Alter: Anzahl; Standort: Zeichenfolge; } Typ LazyPerson = Getters<Person>; // Typ LazyPerson = { // getName: () => Zeichenfolge; // getAge: () => Zahl; // getLocation: () => Zeichenfolge; // } Sie können auch den bedingten Typ verwenden, um ein „Niemals“ zurückzugeben und so bestimmte Attribute herauszufiltern: // Entfernen Sie die Eigenschaft „kind“ Typ RemoveKindField<Typ> = { [Eigenschaft im Schlüssel des Typs als Exclude<Eigenschaft, "kind">]: Typ[Eigenschaft] }; Schnittstelle Kreis { Art: "Kreis"; Radius: Zahl; } Typ KindlessCircle = RemoveKindField<Kreis>; // Typ KindlessCircle = { // Radius: Zahl; // } Sie können auch über jeden Vereinigungstyp iterieren, nicht nur über Typ EventConfig<Events erweitert { Art: Zeichenfolge }> = { [E in Ereignissen als E["Art"]]: (Ereignis: E) => ungültig; } Typ SquareEvent = { Art: "Quadrat", x: Zahl, y: Zahl }; Typ CircleEvent = { Art: "Kreis", Radius: Zahl }; Typ Konfiguration = EventConfig<Quadratereignis | Kreisereignis> // Typ Konfiguration = { // Quadrat: (Ereignis: Quadratereignis) => void; // Kreis: (Ereignis: Kreisereignis) => void; // } 4. Weitere ErkundungMapping-Typen können auch mit anderen Funktionen verwendet werden. Dies ist beispielsweise ein Mapping-Typ, der bedingte Typen verwendet und true oder false zurückgibt, je nachdem, ob das Objekt ein pii-Attribut hat: Typ ExtractPII<Typ> = { [Eigenschaft im Schlüssel des Typs]: Typ [Eigenschaft] erweitert { pii: true } ? true : false; }; Typ DBFields = { ID: {Format: "inkrementierend"}; Name: { Typ: Zeichenfolge; pii: true }; }; Typ ObjectsNeedingGDPRDeletion = ExtractPII<DBFields>; // Typ ObjectsNeedingGDPRDeletion = { // ID: falsch; // Name: wahr; // } Das könnte Sie auch interessieren:
|
<<: Detaillierter Prozess zum Upgrade von gcc (Version 10.2.0) in der CentOS7-Umgebung
>>: So zeigen Sie Webseiten in verschiedenen Auflösungen und Browsern richtig an
Hinweis: Die derzeit beliebtesten Front-End-Frame...
MySQL-SQL-Anweisung zum Erstellen einer Tabelle A...
Inhaltsverzeichnis Vorwort 1. MySQL-Hauptspeicher...
Manchmal müssen Sie Links verwenden, aber Sie müss...
Dies ist ein wichtiges (und wunderbares) Thema fü...
Vorwort Sehen wir uns zunächst an, wie eine TCP-V...
Parallelitätsfunktionen Zeit für i in `grep serve...
Ich habe mehr als eine Stunde gebraucht, um SSH i...
Inhaltsverzeichnis Funktionskomponenten Aufteilun...
Vue implementiert die Palastgitterrotationslotter...
Ich entwickle derzeit ein neues App-Projekt. Dies...
Dieser Artikel testet die Umgebung: CentOS 7 64-B...
In diesem Artikelbeispiel wird der spezifische Co...
CocosCreator Version 2.3.4 Drachenknochenanimatio...
Hintergrund: Da die Projekte des Unternehmens dem...