【发布时间】:2019-05-26 18:00:04
【问题描述】:
我想在普通打字稿中复制 lodash 的 _.omit 函数。 omit 应该返回一个对象,其中删除了某些属性,这些属性是通过参数指定的,位于先出现的对象参数之后。
这是我最好的尝试:
function omit<T extends object, K extends keyof T>(obj: T, ...keys: K[]): {[k in Exclude<keyof T, K>]: T[k]} {
let ret: any = {};
let key: keyof T;
for (key in obj) {
if (!(keys.includes(key))) {
ret[key] = obj[key];
}
}
return ret;
}
这给了我这个错误:
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 是
keyof T而T是对象,因此 key 可以是symbol、number或string。
1234563我想。所以这意味着这里有一个类型错误?
感谢任何关于为什么这不起作用以及如何使其起作用的见解!
【问题讨论】:
-
嘿,Salami,我希望我的回答能得到反馈。
-
@NurbolAlpysbayev 感谢您的回答。我只想让其他人有机会提出一个更简单的解决方案(如果存在的话)。我不会简单地假设存在更简单的东西,但我很难完全理解您的解决方案以完全诚实:)
-
不,没有更简单的解决方案,我保证你。因为它很很简单,只是你还没有明白。你可以问我到底有什么不清楚的..
标签: javascript typescript underscore.js lodash ecmascript-2016