Typescript:作为函数参数分别检查任何接口属性的键和类型组合
给定一个带有接口的变量:Typescript:作为函数参数分别检查任何接口属性的键和类型组合,typescript,interface,Typescript,Interface,给定一个带有接口的变量: 接口模型{ textField?:字符串; 意义:布尔; 百分比:数字; 只读someMap:{ [键:字符串]:字符串; }; getMeSomething(代码:string):string; } let模型:模型; 我想在该函数中分别检查键名和值类型: const setField=(fieldName:WritableKeysOf,fieldValue:Model[WritableKeysOf])=>{ 模型[字段名]=字段值; } 所以当我这样使用它时:
接口模型{
textField?:字符串;
意义:布尔;
百分比:数字;
只读someMap:{
[键:字符串]:字符串;
};
getMeSomething(代码:string):string;
}
let模型:模型;
我想在该函数中分别检查键名和值类型:
const setField=(fieldName:WritableKeysOf,fieldValue:Model[WritableKeysOf])=>{
模型[字段名]=字段值;
}
所以当我这样使用它时:
setField('textField',1);
设置字段(“不存在”,真);
setField('someMap',{'it':'not matter'});
我有错误,但这些都可以:
setField('textField',未定义);
设置字段(“百分比”,2);
设置字段('getMeSomething',code=>code+'suffix');
我想实现:
应与任何接口道具名称匹配,但与fieldName
✔️李>readonly
应与接口中的任何可能类型匹配,但与字段值
✔️李>只读
- 将两者结合起来,这样我就可以设置一个没有错误的值❌李>
只读
,并正确获取这两个参数的类型,但出于某种原因,model[fieldName]
现在是从不
。也许我可以用一些泛型来告诉我到底要检查哪个接口
如同,您可以引入约束类型参数,将字段值
的类型与相应的字段名
相关联:
const setField = <T extends WritableKeysOf<Model>> (fieldName: T, fieldValue: Model[T]) => {
model[fieldName] = fieldValue;
}
const setField=(fieldName:T,fieldValue:Model[T])=>{
模型[字段名]=字段值;
}
作为一个参数,您可以引入一个约束类型参数,将字段值
的类型与相应的字段名
相关联:
const setField = <T extends WritableKeysOf<Model>> (fieldName: T, fieldValue: Model[T]) => {
model[fieldName] = fieldValue;
}
const setField=(fieldName:T,fieldValue:Model[T])=>{
模型[字段名]=字段值;
}
设置字段(键:T,值:模型[T])
设置字段(键:T,值:模型[T])