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.
