Notieren Sie einige der Orte, an denen Sie Zeit verbracht haben. (Zuerst möchte ich mich beschweren: Stackoverflow hat wirklich alles, aber Baidu ist wirklich nutzlos.) GrubeBei einem Kompatibilitätsmissverständnis einer AS-Behauptung wie etwa „a“ als „b“ wird kein Fehler gemeldet. Inkonsistentes Verhalten zwischen Schnittstelle und Typ (als ich es zum ersten Mal bemerkte, dachte ich, ich hätte den falschen Typ geschrieben und war verwirrt): Typ Typ = { Schlüssel: „Wert“ } Schnittstelle Schnittstelle { Schlüssel: „Wert“ } Der Typ scheint nicht unterschiedlich zu sein, beide sind wahr = Typ erweitert Schnittstelle? Typ erweitert Schnittstelle? wahr : falsch : falsch Typ Grubenpunkt = { [Schlüssel: Zeichenfolge]: Grubenpunkt} | Zeichenfolge Typtest<T> = T erweitert Fallstrick? true : false Typ Dies ist wahr = Test <Typ> Typ Dies ist falsch = Test <Schnittstelle> Auf GitHub gibt es eine offizielle Erklärung, dass diese Grube absichtlich hinterlassen wurde. Es wird gesagt, dass die Erkennung aufgrund der Erweiterbarkeit der Schnittstelle (derselbe Name wird automatisch zusammengeführt) unpraktisch ist. Wenn Generika zum Implementieren einer Funktionsüberladung verwendet werden, müssen bei der Implementierung der Funktion häufig so viele Behauptungen wie erzwungen verwendet werden, da für Generika keine spezifischen Einschränkungen gelten. //Das ist alles. Ich bin zu faul, den folgenden Code tatsächlich zu testen 🙃 //fns ist eine Funktionsindextabelle, TFns ist der Konstantentyp der Indextabelle. Funktionsüberladung fehlgeschlagen <T extends keyof TFns>(fn:T, params: Parameters<fns[T]>){ fns[fn](...params) //Bei der Implementierung wird der Union-Typ nicht eingegrenzt, daher wird ein Fehler gemeldet //Der Fehler sollte etwa lauten: „Die Parameter von Methode 1 konnten nicht an Methode 2 übergeben werden“} //Aber bei externer Verwendung spielt es keine Rolle, ob die Semantik des Typs erfüllt ist Der Spread-Operator ist nicht intuitiv: Eigentlich gibt es hier eine Lösung, aber der geschriebene Typ ist einfach unlesbar (Dutzende von Zeilen, darunter eine große Anzahl von Erweiterungen, die als Typ-If-Urteile fungieren), also werde ich sie nicht veröffentlichen. Der Code ist unten aufgeführt: // Erforderliche Typen: [...number[], "middle-element", ...boolean[]] //Das Obige ist ungültig, es gibt nur an, wofür der folgende Typcode verwendet wird (um die oben angegebenen Typbeschränkungen zu implementieren) Typ Elem = Zahl | Boolesch | „mittleres Element“; Typ Last<T erweitert beliebig[]> = T erweitert [infer _] ? niemals : T erweitert [...schließe _, schließe Tl] ? Tl : niemals Typ HandleEmpty<T erweitert beliebig[], Daten> = T['Länge'] erweitert 0 ? nie : Daten Typ Validierung<Params erweitert beliebig[], Cache erweitert Elem[] = []> = Parameter erweitert [] ? Cache['Länge'] erstreckt sich 0 ? niemals : Zwischenspeicher : Parameter erweitert [Fst ableiten, ...Rest ableiten] ? Cache erweitert [] ? Fst erweitert Nummer ? HandleEmpty<Rest, Validierung<Rest, [...Cache, Fst]>> : niemals : Fst erweitert Nummer ? Last<Cache> erweitert Nummer ? HandleEmpty<Rest, Validierung<Rest, [...Cache, Fst]>> : niemals : Fst erweitert "Mittelelement" ? Last<Cache> erweitert Nummer ? HandleEmpty<Rest, Validierung<Rest, [...Cache, Fst]>> : niemals : "mittleres Element" erweitert Cache[Zahl] ? Fst erweitert Boolean ? Validierung<Rest, [...Cache, Fst]> : niemals : niemals : niemals Typ IsNever<T> = [T] erweitert [nie]? true : false; Funktionskontrolle< Params erweitert Elem[], IsValid erweitert Validation<Params> >(...arr: IsNever<IsValid> erweitert true ? [nie] : [...Params]) { Rückflug an } const normal = check(1, 'Mittelelement', false) const error = check(false, "mittleres Element", 2) Erweiterte OperationenNeuzuordnung von Objektnamen: //{ "new-a":beliebig; "new-b":beliebig } Typ neu zuordnen = { [K in "a" | "b" als `new-${K}`]: beliebig } Aufteilen von Union-Typen: Das Schlüsselwort infer kann zum Aufteilen von Union-Typen verwendet werden. //"a1"|"b2" Typaufteilung erfolgreich <_Keys = keyof { a: 1, b: 2 }> = _Keys erweitert Infer K? `${Extrahieren<K, string>}${{ a: 1, b: 2 }[Extrahieren<K, _Keys>]}` : niemals // Hinweis: (ab ts4.4.4) Direkt kann „keyof Obj extends infer K“ den Union-Typ nicht aufteilen, der Grund ist unbekannt (zu faul, das zu überprüfen 😁). //Das Ergebnis ist "a1"|"a2"|"b1"|"b2" Typaufteilung fehlgeschlagen = keyof { a: 1, b: 2 } erweitert Infer K? `${Extrahieren<K, string>}${{ a: 1, b: 2 }[Extrahieren<K, "a" | "b">]}` : niemals Tupeltypen:
Rekursive Typen: Verwenden Sie ...infer More, um Rekursion auf Array-Typen zu implementieren. Typ Konverter<T> = T erweitert Zeichenfolge ? "str" : null //Es geht als [Zeichenfolge,Zahl,Zeichenfolge] hinein und kommt als ["str",null,"str"] heraus. Typrekursion< Eingabequelle erweitert any[], Der interne Typcache erweitert any[] = [] > = Eingabequelle erweitert [beliebig, ... verbleibende Elemente ableiten]? Rekursion <restliche Elemente, [...interner Typcache, Konverter <Eingabequelle [0]>]> : Eingangsquelle Krimskrams
Anfängern wird empfohlen, die offizielle Website aufzurufen und die Dokumente zu lesen. Nachdem Sie sich mit ts befasst haben, können Sie auf die neuen Funktionen (Gameplay) achten, die durch die Versionsaktualisierungen bereitgestellt werden. ZusammenfassenDies ist das Ende dieses Artikels, in dem ich die Orte zusammenfasse, an denen ich Zeit mit TypeScript verbracht habe. Weitere relevante Inhalte zu den Orten, an denen ich Zeit mit TypeScript verbracht habe, finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! |
<<: Detaillierte Erklärung zum Schreiben mehrerer Bedingungen von CSS: nicht
>>: Zusammenfassung der Tests für logische MySQL-Sicherungen und -Wiederherstellungen
Wenn Sie CSS verwenden, vergessen Sie nicht, DOCTY...
Vorwort Nehmen Sie Element Plus als Beispiel, um ...
Yum (vollständiger Name Yellow Dog Updater, Modif...
Sie können dieses Logo lokal als .rar-Datei speic...
Inhaltsverzeichnis 1. querySelector fragt ein ein...
Inhaltsverzeichnis Vorwort Nr.1 Ein Fokus Nr. 2 E...
Wirkung Das Wirkungsdiagramm sieht wie folgt aus ...
1. MySQLs eigenes Stresstest-Tool Mysqlslap mysql...
Inhaltsverzeichnis 1. Grundlegende Konzepte 1.1 Z...
Zwei kleine Probleme, die mich aber lange Zeit ges...
In diesem Artikelbeispiel wird der spezifische Ja...
Was ist HTML? HTML ist eine Sprache zur Beschreib...
Inhaltsverzeichnis Hintergrund 1. Was ist DNS-Pre...
Effektbild: Vorwort: Kürzlich arbeitete ich an ei...
Inhaltsverzeichnis Einführung in Bootstrap und di...