我想在普通的打字稿中复制lodash的_.omit函数.省略应该返回一个对象,该对象具有在首先出现的对象参数之后通过参数指定的某些属性.
这是我最好的尝试:
function omit
这给了我这个错误:
Argument of type 'keyof T' is not assignable to parameter of type 'K'.
Type 'string | number | symbol' is not assignable to type 'K'.
Type 'string' is not assignable to type 'K'.ts(2345)
let key: keyof T
我对错误的解释是:
>由于key是T的键,而T是对象,因此key可以是符号,数字或字符串.
>因为我使用for in循环,key只能是一个字符串,但是如果我传入一个数组,包括可能需要一个数字,例如?我认为.这意味着这里有类型错误?
任何有关为什么这不起作用以及如何使其工作的见解表示赞赏!
最佳答案
interface Omit {
为方便起见,我将大部分内容都放到了界面上.
问题是K一直在(正确时态?)推断为元组,而不是键的联合.因此,我相应地更改了它的类型约束:
[...(keyof T)[]] // which can be broke down to:
keyof T // a union of keys of T
(keyof T)[] // an array containing keys of T
[] // a tuple
[...X] // a tuple that contains an array X
然后,我们需要将元组K转换为union(以便从keyof T中排除它).用K [数字]完成,我猜是自我解释,它与T [keyof T]相同,创建了T值的并集.
原文地址:https://www.jb51.cc/js/429292.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。