Ist das Schlüssel-Wert-Paar im Typoskript verfügbar? Wenn ja, wie geht das? Kann jemand Beispiel-Beispiellinks bereitstellen.
Ist das Schlüssel-Wert-Paar im Typoskript verfügbar? Wenn ja, wie geht das? Kann jemand Beispiel-Beispiellinks bereitstellen.
Antworten:
Ist das Schlüssel-Wert-Paar in Typescript verfügbar?
Ja. Genannt ein Index Unterschrift :
interface Foo {
[key: string]: Bar;
}
let foo:Foo = {};
Hier sind Schlüssel string
und Werte Bar
.
Sie können ein es6 Map
für richtige Wörterbücher verwenden, die voncore-js
polyfilled sind .
key
. Sie können zum Beispiel auch Folgendes schreiben : [countryCode: string]: string
. Schön für die Lesbarkeit.
Der einfachste Weg wäre so etwas wie:
var indexedArray: {[key: string]: number}
Verwendung:
var indexedArray: {[key: string]: number} = {
foo: 2118,
bar: 2118
}
indexedArray['foo'] = 2118;
indexedArray.foo= 2118;
let foo = indexedArray['myKey'];
let bar = indexedArray.myKey;
Bar
Ist das Schlüssel-Wert-Paar in Typescript verfügbar?
Wenn Sie an ein C # KeyValuePair <string, string> denken : Nein, aber Sie können eines einfach selbst definieren:
interface KeyValuePair {
key: string;
value: string;
}
Verwendung:
let foo: KeyValuePair = { key: "k", value: "val" };
KeyValuePair
ist keine Liste, aber es könnte ein Eintrag einer Liste sein. Vielleicht suchen Sie eine List<>
? Siehe stackoverflow.com/questions/23096260/…
Nicht für den Fragesteller, sondern für alle anderen Interessierten: Siehe: Definieren der Typoskript-Zuordnung des Schlüsselwertpaars. Dabei ist der Schlüssel eine Zahl und der Wert ein Array von Objekten
Die Lösung lautet daher:
let yourVar: Map<YourKeyType, YourValueType>;
// now you can use it:
yourVar = new Map<YourKeyType, YourValueType>();
yourVar[YourKeyType] = <YourValueType> yourValue;
Prost!
Map
definiert? Ist es winkelspezifisch?
Eine andere einfache Möglichkeit ist die Verwendung eines Tupels :
// Declare a tuple type
let x: [string, number];
// Initialize it
x = ["hello", 10];
// Access elements
console.log("First: " + x["0"] + " Second: " + x["1"]);
Ausgabe:
Erstens: Hallo Zweitens: 10
Sie können auch Folgendes in Betracht ziehen Record
:
const someArray: Record<string, string>[] = [
{'first': 'one'},
{'second': 'two'}
];
Oder schreibe so etwas:
const someArray: {key: string, value: string}[] = [
{key: 'first', value: 'one'},
{key: 'second', value: 'two'}
];
Ein Beispiel für ein Schlüsselwertpaar ist:
[key: string]: string
Sie können alles als Wert angeben. Wenn Sie programmgesteuert Werte ausgefüllt haben, deren Typen variieren, können Sie Folgendes eingeben:
[key: string]: any
aber fahren Sie nach eigenem Ermessen mit any
:) fort
class Pair<T1, T2> {
private key: T1;
private value: T2;
constructor(key: T1, value: T2) {
this.key = key;
this.value = value;
}
getKey() {
return this.key;
}
getValue() {
return this.value;
}
}
const myPair = new Pair<string, number>('test', 123);
console.log(myPair.getKey(), myPair.getValue());
Eine prägnante Möglichkeit besteht darin, ein Tupel als Schlüssel-Wert-Paar zu verwenden :
const keyVal: [string, string] = ["key", "value"] // explicit type
// or
const keyVal2 = ["key", "value"] as const // inferred type with const assertion
[key, value]
Tupel stellen auch die Kompatibilität mit integrierten JS-Objekten sicher:
Object
, insb. Object.entries
,Object.fromEntries
Map
, insb. Map.prototype.entries
und new Map()
KonstruktorSet
, insb. Set.prototype.entries
Sie können einen generischen KeyValuePair
Typ für die Wiederverwendbarkeit erstellen :
type KeyValuePair<K extends string | number, V = unknown> = [K, V]
const kv: KeyValuePair<string, string> = ["key", "value"]
Das kommende TS 4.0 bietet benannte / beschriftete Tupel für eine bessere Dokumentation und Werkzeugunterstützung:
type KeyValuePairNamed = [key: string, value: string] // add `key` and `value` labels
const [key, val]: KeyValuePairNamed = ["key", "val"] // array destructuring for convenience