Как правильно ввести функцию «пропустить» в TypeScript, чтобы избежать сообщений об ошибках? - PullRequest
0 голосов
/ 01 апреля 2020
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'.

И не хотелось бы иметь сообщений об ошибках и правильно набранной функции.

1 Ответ

2 голосов
/ 01 апреля 2020

Мне кажется, что вы пытаетесь вернуть объект, поэтому я считаю, что вы хотите вернуть Omit<T, U>, а не Exclude<T, U>:

Вы можете увидеть разницу здесь

Вот как можно избежать ошибок:

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>
  );
...