Я хочу мати можливість присвоїти властивість об'єкта значенню, заданому ключем і значенням як вхідним даних, але все ще зможу визначити тип значення. Це трохи важко пояснити, тому цей код повинен виявити проблему:
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
Я спробував перейти value: anyна, value: valueof JWTале це не вийшло.
В ідеалі, onChange('expire', 1337)це не вдасться, оскільки 1337це не тип дати.
Як я можу змінити value: anyзначення значення даного ключа?
tupleзначення зі значень. Чи є шанс це зробити?