【发布时间】:2018-08-23 11:05:14
【问题描述】:
我希望能够将对象属性分配给给定键和值作为输入的值,但仍然能够确定值的类型。这有点难以解释,所以这段代码应该可以揭示问题:
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 不是 Date 类型。
如何将value: any 更改为给定键的值?
【问题讨论】:
-
包 type-fest (github.com/sindresorhus/type-fest) 具有 ValueOf 类型,以及许多其他非常有用的实用程序类型 - 我一直使用它,并且强烈推荐它。
标签: typescript types