Tôi muốn có thể gán một thuộc tính đối tượng cho một giá trị được cung cấp một khóa và giá trị làm đầu vào nhưng vẫn có thể xác định loại giá trị. Hơi khó giải thích vì vậy mã này sẽ tiết lộ vấn đề:
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
Tôi đã cố gắng thay đổi value: anythành value: valueof JWTnhưng điều đó không hiệu quả.
Tốt nhất, onChange('expire', 1337)sẽ không thành công vì 1337không phải là loại Ngày.
Làm cách nào để tôi có thể thay đổi value: anygiá trị của khóa đã cho?
tupletừ các giá trị. Có cơ hội nào để làm điều đó không?