微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

javascript – TypeScript类型安全的省略函数

我想在普通的打字稿中复制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值的并集.

Playground

原文地址:https://www.jb51.cc/js/429292.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐