Im Folgenden stellt in Typoskript 2.5.3 fein:Typoskript: Sind berechnete Objektschlüssel aktiv erlaubt?
interface Test {
test: string
}
const anything = 'someDifferentKey';
const a: Test = {
[anything]: true, // no error
test: 'whatever'
}
Aber dies nicht:
interface Test {
test: string
}
const a: Test = {
someDifferentKey: true, // error
test: 'whatever'
}
Meine Frage ist - ist es 'sicher' auf berechneten Objektschlüssel verlassen immer erlaubt sein, mit einer typisierten Objektdefinition zu taggen, oder sind berechnete Eigenschaften basierend auf Konstanten vales (zB "some"+"differentKey"
oder anything
const referenziert oben) einfach ignoriert wegen einer Beschränkung der aktueller Typescript-Compiler?
Bearbeiten zur Klarstellung:
Lesen Sie die oben als: „Hat die TS spec mir gibt keine Garantie, dass die dynamischen Eigenschaften werden nicht immer einen Übersetzungsfehler verursachen?“ nach Juan Mendes Kommentar.
Ich verstehe Juan, und das macht absoluten Sinn. Aber ich beziehe mich speziell darauf, ob _bekannte_ berechnete Werte (d. H. Diejenigen, die Konstanten zugewiesen sind) immer sicher bleiben. In meinem Beispielcode ist "alles" eine Konstante, so dass es für einen statischen Typprüfer nicht zu weit entfernt erscheinen würde, um eines Tages zu erkennen, dass '[irgendwas]' nur eine Abkürzung für 'someDifferentKey' ist. Ich denke, mein Q war eher ein spekulativer Ausblick darauf, ob dies immer sicher ist, oder ob ein zukünftiger TS-Compiler eines Tages beginnen könnte, statische Werte statisch zu analysieren. –
Ich glaube nicht, dass wir garantieren können, dass bei dynamischen Eigenschaften, die aus Konstanten gesetzt werden, der Compiler sie nicht als Fehler abfängt. Aber wann würdest du das jemals benutzen? Wenn es eine echte dynamische Eigenschaft ist, dann wird der Compiler das nie fangen –
Ich lief heute in einen Anwendungsfall, wo ich einen dynamischen Schlüssel basierend auf Benutzereingaben anhängen musste, der wie erwartet kompiliert wurde. Aber ich merkte, dass ich nie mit Konstanten experimentiert hatte, und war überrascht, dass etwas wie "[" "" "" "] - was auch als statische Literale interpretiert werden könnte - auch kompiliert wurde, was mich neugierig machte, wie weit TS könnte bereit sein, diese Sache in Zukunft zu analysieren ... oder ob berechnete Requisiten immer tabu wären. Zugegeben, das ist eher ein Gedankenexperiment als ein Problem, auf das ich stoßen werde. –