Typoskript-Mix-Index-Signatur mit bekannten Eigenschaften
Angenommen, die Schnittstelle verfügt über einige bekannte Eigenschaften mit ihren Typen und kann zusätzliche Eigenschaften mit unbekannten Schlüsseln und einige andere Typen haben . etwas wie:
interface Foo {
lenght: number;
[key: string]: string;
}
const foo : Foo = {
lenght: 1,
txt: "TXT",
};
TS-Fehler: "Die Eigenschaft 'Länge' vom Typ 'Nummer' kann nicht dem Zeichenfolgenindex Typ 'Zeichenfolge' zugewiesen werden."
Wie soll eine solche Schnittstelle eingegeben werden?
Antworten
[key: string]: string;
Dadurch wird verhindert, dass die Foo
Schnittstelle keine Zeichenfolgeneigenschaften aufweist. (In Ihrer Beispielnummer).
Sie können die bekannten und unbekannten Eigenschaften in zwei Schnittstellen aufteilen und Ihren Zieltyp als Vereinigungstyp wie folgt definieren:
interface Foo {
lenght: number;
}
interface Bar {
[key: string]: string ;
}
type FooBar = Foo | Bar;
const foo : FooBar = {
lenght: 1, // its ok defined in foo
txt: "TXT", // string is ok
baz : 3 // error because its not string
};
Spielplatz Link
Schauen Sie sich dieses Snippet an, das den Punkt gut erklärt
interface ArrStr {
[key: string]: string | number; // Must accommodate all members
[index: number]: string; // Can be a subset of string indexer
// Just an example member
length: number;
}
Sie können diesen Artikel für weitere Details überprüfen (ich habe das Snippet von dort ausgewählt)
https://basarat.gitbook.io/typescript/type-system/index-signatures
Für dieses Element
Sowohl Zeichenfolgen- als auch Zahlenindexer haben
Dies ist kein häufiger Anwendungsfall, aber der TypeScript-Compiler unterstützt ihn trotzdem. Es gibt jedoch die Einschränkung, dass der Zeichenfolgenindexer strenger ist als der Zahlenindexer. Dies ist beabsichtigt, um beispielsweise das Schreiben von Dingen wie: zu ermöglichen.