TypeScript: Erstellen eines leeren typisierten Container-Arrays

Lesezeit: 3 Minuten

Benutzer-Avatar
wagt

Ich erstelle ein einfaches Logikspiel namens “Three of a Crime” in TypeScript.

Beim Versuch, ein typisiertes Array in TypeScript vorab zuzuweisen, habe ich versucht, Folgendes zu tun:

var arr = Criminal[];

was den Fehler “Check format of expression term” ergab.

habe das auch versucht

var arr : Criminal = [];

und dies erzeugte “kann keine konvertieren[] zu ‘kriminell’

Was ist der ‘TypeScript’-Weg, dies zu tun?

Benutzer-Avatar
Thorarin

Bei den vorhandenen Antworten fehlte eine Option, daher hier eine vollständige Liste:

// 1. Explicitly declare the type
var arr: Criminal[] = [];

// 2. Via type assertion
var arr = <Criminal[]>[];
var arr = [] as Criminal[];

// 3. Using the Array constructor
var arr = new Array<Criminal>();
  1. Die explizite Angabe des Typs ist die allgemeine Lösung, wenn der Typrückschluss für eine Variablendeklaration fehlschlägt.

  2. Der Vorteil der Verwendung von a Typ Behauptung (manchmal als Cast bezeichnet, aber in TypeScript ist es nicht wirklich ein Cast) funktioniert für jeden Ausdruck, sodass es auch dann verwendet werden kann, wenn keine Variable deklariert ist. Es gibt zwei Syntaxen für Typzusicherungen, aber nur die letztere funktioniert in Kombination mit JSX, wenn Sie sich darum kümmern.

  3. Die Verwendung des Array-Konstruktors ist etwas, das Ihnen nur in diesem speziellen Anwendungsfall helfen wird, aber das ich persönlich am lesbarsten finde. Allerdings gibt es eine leichte Auswirkungen auf die Leistung zur Laufzeit*. Auch wenn jemand verrückt genug wäre, den Array-Konstruktor neu zu definieren, könnte sich die Bedeutung ändern.

Es ist eine Frage der persönlichen Präferenz, aber ich finde die dritte Option am lesbarsten. In den allermeisten Fällen wären die erwähnten Nachteile vernachlässigbar und die Lesbarkeit ist der wichtigste Faktor.

*: Lustige Tatsache; Zum Zeitpunkt des Schreibens betrug der Leistungsunterschied in Chrome 60 %, während es in Firefox keinen messbaren Leistungsunterschied gab.

  • das überzeugt mich davon, dass eine Sprache, die nur einen Weg hat, etwas zu tun, am besten ist.

    – ahnbizcad

    16. Juli 2021 um 4:50 Uhr

  • Es konnte festgestellt werden, dass die <> operator funktioniert nicht in tsx, aber dort as Option ist dort vollkommen gültig.

    – Wiktor Zychla

    20. Januar um 11:28 Uhr

Das Problem der korrekten Vorabzuweisung eines typisierten Arrays in TypeScript war aufgrund der Array-Literal-Syntax etwas verdeckt, daher war es nicht so intuitiv, wie ich zuerst dachte.

Der richtige Weg wäre

var arr : Criminal[] = [];

Dadurch erhalten Sie ein korrekt typisiertes, leeres Array, das in der Variablen „arr“ gespeichert ist.

Hoffe das hilft anderen!

Benutzer-Avatar
Fylax

Ich weiß, dass dies eine alte Frage ist, aber ich hatte kürzlich ein ähnliches Problem, das auf diese Weise nicht gelöst werden konnte, da ich ein leeres Array eines bestimmten Typs zurückgeben musste.

ich hatte

return [];

wo [] war Criminal[] Typ.

Weder return: Criminal[] []; Noch return []: Criminal[]; hat bei mir funktioniert.

Auf den ersten Blick habe ich es gelöst, indem ich eine typisierte Variable erstellt habe (wie Sie richtig berichtet haben), kurz bevor Sie sie zurückgeben, aber (ich weiß nicht, wie JavaScript-Engines funktionieren) kann Overhead verursachen und ist weniger lesbar.

Der Gründlichkeit halber werde ich diese Lösung auch in meiner Antwort melden:

let temp: Criminal[] = [];
return temp;

Schließlich fand ich TypeScript-Type-Casting, mit dem ich das Problem präziser und lesbarer (und vielleicht effizienter) lösen konnte:

return <Criminal[]>[];

Ich hoffe, dies wird zukünftigen Lesern helfen!

Bitte versuchen Sie dies, was bei mir funktioniert.

return [] as Criminal[];

Benutzer-Avatar
Raman bhardwaj

Okay, Sie haben hier die Syntax falsch verstanden, der richtige Weg, dies zu tun, ist:

var arr: Criminal[] = [];

Ich gehe davon aus, dass Sie var verwenden, was bedeutet, dass Sie es irgendwo in deklarieren müssen func()mein Vorschlag wäre verwenden let Anstatt von var.

Wenn Sie es als c-Klasseneigenschaft deklarieren, verwenden Sie Zugriffsmodifikatoren wie private, public, protected.

Benutzer-Avatar
סטנלי גרונן

Für öffentlich zugängliche Verwendung wie unten:

public arr: Criminal[] = [];

1312110cookie-checkTypeScript: Erstellen eines leeren typisierten Container-Arrays

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy