typescript - 基于键检查值的对象设置器函数
问题描述
例如我有一个像这样的对象:
interface Test{
a: number;
b: string;
c: boolean;
}
const obj:Test = {
a: 1,
b: '1',
c: true,
}
我想做一个可以改变对象内容的函数,但是值是根据键来检查的。我可以像这样得到getter,但我一直在制作setter:
function getValue<T , U = keyof T>(obj: T, key: U){
return obj[key]
}
function setValue<T , U = keyof T, V???????>(obj: T, key: U, value: V>{
obj[key] = value
}
所以如果我这样做:
setValue(obj,'a',1) // no error
setValue(obj,'b',1) // typecheck error
解决方案
您不需要第三个泛型 - 您可以使用T[U]
,因为 T 和 U 都是由该点定义的。
function getValue<T, U extends keyof T>(obj: T, key: U){
return obj[key]
}
function setValue<T, U extends keyof T>(obj: T, key: U, value: T[U]){
obj[key] = value
}
setValue(obj,'a',1) // no error
setValue(obj,'b',1) // typecheck error
推荐阅读
- python - 这个冒泡排序逻辑是否正确
- android-studio - RecyclerView 中的 OnClicklistener
- javascript - 光标显示下方的图像
- wpf - 在 UI 上加载组合框后如何选择“无”作为第一个选定项目 - WPF
- php - 列出当前分类档案的类别
- php - 如何阻止 htaccess 重写规则重写所有 url
- python - 将 Pandas 对象转换为数组
- firebase - firebase 数据库不返回或显示新创建的集合
- django - 访问 django 中媒体文件夹中存在的文件夹
- r - 按名称将数据帧收集到列表中时,参数“nm”丢失错误