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

前端之家收集整理的这篇文章主要介绍了javascript – TypeScript类型安全的省略函数前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_0@

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

猜你在找的JavaScript相关文章