Website-Suche

Was bedeutet in TypeScript eine Typanmerkung mit zwei Typen zwischen zwei geschweiften Klammern?


Ein Beispiel:

function doSomething(): { string, SomeClass } {
 ...
} 

Beim Herumspielen mit dem Compiler scheint es, dass er jeden Rückgabewert akzeptiert, der ein Objekt mit einer beliebigen Anzahl von string-Schlüsseln und SomeClass-Werten ist.

Also so etwas wie dies:

{
 "key1": someClass1,
 "key2": someClass2,
  ...
}

Verstehe ich das richtig?

--Aktualisierung--

Es scheint, dass die Annotation, die ich brauche, { [key: string]: SomeClass } ist

Antwort #1

Nein - diese Funktionssignatur bedeutet 'diese Funktion wird ein Objekt zurückgeben, das die Schlüssel string und SomeClass hat und any-Werte'. Das bedeutet, dass dies problemlos kompiliert:

function doSomething(): { string, SomeClass } {
  return {
    string: false,
    SomeClass: 1
  }
} 

Es ist funktional äquivalent zu:

function doSomething(): { string: any, SomeClass: any }

Antwort #2

Um zu sehen, was es wirklich bedeutet, können Sie es mit Code wie diesem überprüfen:

let a: { string, SomeClass };

let v: void = a;

Der Compiler wird Ihnen sagen:

Type '{ string: any; SomeClass: any; }' is not assignable to type 'void'.

Also, string und SomeClass sind in diesem Fall überhaupt keine Typen, sie sind Eigenschaftsnamen, und ihr Typ wird als any angenommen. Das Aktivieren von --noImplicitAny hilft normalerweise, dies zu verdeutlichen.

Verwandte Artikel