【问题标题】:How to correctly type an 'omit' function in TypeScript to avoid error messages?如何在 TypeScript 中正确键入“省略”函数以避免错误消息?
【发布时间】:2020-04-01 13:04:21
【问题描述】:
export const omit = <T, U extends keyof T>(obj: T, keys: U[]): Exclude<T, U> =>
  Object.keys(obj).reduce(  
    (acc: any, curr: any) => (keys.includes(curr) ? acc : { ...acc, [curr]: obj[curr] }),
    {}
  );

收到一条错误消息,说明 TS7053: Element implicitly has an 'any' type because expression of type 'any' can't be used to index type 'unknown'.

并且希望没有错误消息和正确键入的函数。

【问题讨论】:

    标签: javascript typescript express typeorm


    【解决方案1】:

    在我看来,您正在尝试返回一个对象,所以我相信您想返回 Omit&lt;T, U&gt; 而不是 Exclude&lt;T, U&gt;

    你可以看到区别here

    以下是避免错误的方法:

    export const omit = <T, U extends keyof T>(obj: T, keys: U[]): Omit<T, U> =>
      (Object.keys(obj) as U[]).reduce(
        (acc, curr) => (keys.includes(curr) ? acc : { ...acc, [curr]: obj[curr] }),
        {} as Omit<T, U>
      );
    

    【讨论】:

    • 太棒了,谢谢。可能需要更改的一件事是您的“包含”错字,这样其他人就不会认为这不起作用,而实际上它很好用!
    • 除此之外,如何更好地键入这个“pluck”函数以获得更好的错误消息? export const pluck = &lt;T, K extends keyof T&gt;(obj: T, keys: K[]): Pick&lt;T, K&gt; =&gt; keys.reduce((acc: any, curr) =&gt; ({ ...acc, [curr]: obj[curr] }), {});
    • 感谢您的错字!我刚刚修好了。让我看看勇气。
    • 这是你的 pluck 函数:export const pluck = &lt;T, K extends keyof T&gt;(obj: T, keys: K[]): Pick&lt;T, K&gt; =&gt; keys.reduce((acc, curr) =&gt; ({ ...acc, [curr]: obj[curr] }), {} as Pick&lt;T, K&gt;); 但我不太确定你想要什么......
    猜你喜欢
    • 2020-11-18
    • 1970-01-01
    • 2020-04-23
    • 2012-04-11
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多