如何解决如何声明 T[K] 的类型为 X 的函数参数类型的索引器类型,因此 t[k]=x 将是一个有效的表达式
我试图定义一个函数,当给出对象和属性名称时,该函数将修改对象的布尔属性。我在这里找到了几乎可以满足我想要的东西
https://stackoverflow.com/a/42615501/1527544
从调用方来看它工作正常,但函数体仍然会产生错误。如何在不使用 ts-ignore 抑制它的情况下处理它?
function handleFlag<T extends {[key in P]: boolean },P extends keyof T>(data: T,field: P & keyof T) {
data[field] = false; //yelds error Type 'boolean' is not assignable to type 'T[P & keyof T]'.(2322)
// how to let compiler kNow that data[field] is actually of type boolean and should be allowed?
}
//caller side works fine
handleFlag({flag:true,name:'foo'},"flag"); //totally correct - no error
handleFlag({flag:true,"name"); //gives error,since name is not a boolean - very desired behavior
在我的另一个问题 How to declare argument type as key of given object in Typescript? 中,建议我阅读 this 但我不知道那里发生了什么......
解决方法
不是最优雅的方式,但您可以将其转换为帮助编译器:
(data as {[key in P]: boolean })[field] = false;
请注意,这是一个有效的向上转换,因此所有类型检查仍然有效。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。