Ich möchte in der Lage sein, einem Wert, der einen Schlüssel und einen Wert als Eingabe hat, eine Objekteigenschaft zuzuweisen, aber dennoch den Typ des Werts bestimmen können. Es ist etwas schwer zu erklären, daher sollte dieser Code das Problem aufdecken:
type JWT = { id: string, token: string, expire: Date };
const obj: JWT = { id: 'abc123', token: 'tk01', expire: new Date(2018, 2, 14) };
function print(key: keyof JWT) {
switch (key) {
case 'id':
case 'token':
console.log(obj[key].toUpperCase());
break;
case 'expire':
console.log(obj[key].toISOString());
break;
}
}
function onChange(key: keyof JWT, value: any) {
switch (key) {
case 'id':
case 'token':
obj[key] = value + ' (assigned)';
break;
case 'expire':
obj[key] = value;
break;
}
}
print('id');
print('expire');
onChange('id', 'def456');
onChange('expire', new Date(2018, 3, 14));
print('id');
print('expire');
onChange('expire', 1337); // should fail here at compile time
print('expire'); // actually fails here at run time
Ich habe versucht, zu wechseln value: any, value: valueof JWTaber das hat nicht funktioniert.
Idealerweise onChange('expire', 1337)würde dies fehlschlagen, da 1337es sich nicht um einen Datumstyp handelt.
Wie kann ich value: anyden Wert des angegebenen Schlüssels ändern ?
tupleaus Werten erstellen . Gibt es eine Chance dazu?