lodash的mapKeys(camelcase)出现TypeScript错误[TS2741]

lodash的mapKeys(camelcase)出现TypeScript错误[TS2741],typescript,lodash,Typescript,Lodash,我正在尝试键入我的对象,但typescript似乎对此不满意: import { camelCase, mapKeys } from 'lodash/fp'; interface QueryResponse { accept_card_payments: boolean; } interface FinalResponse { acceptCardPayments: boolean; } const getResponse = () => { const toCamelC

我正在尝试键入我的对象,但typescript似乎对此不满意:

import { camelCase, mapKeys } from 'lodash/fp';

interface QueryResponse {
  accept_card_payments: boolean;
}

interface FinalResponse {
  acceptCardPayments: boolean;
}

const getResponse = () => {
  const toCamelCase = mapKeys(camelCase);
  const queryResponse: QueryResponse = { accept_card_payments: false };
  const response: FinalResponse = toCamelCase(queryResponse); // error TS2741

  return response;

}; 
我在
const response
中遇到一个错误,它说:

Property 'acceptCardPayments' is missing in type '
Dictionary<boolean>' but required in type 'FinalResponse'.
类型中缺少属性“acceptCardPayments”
Dictionary'但在类型'FinalResponse'中是必需的。
既然我的类型与
mapKeys(camelCase)的返回值相匹配,那么如何让TypeScript执行呢


我在这里做了一个可重复的例子:

Fp类型并不完美,而且TS也不支持字符串模式类型,因此就转换而言,您正在将对象转换为字典,仅此而已

方法1

快速而肮脏的方法是承认使用
未知

function getFinalResponse(query: QueryResponse): FinalResponse {
  return <FinalResponse>(<unknown>mapKeys(camelCase)(query));
}

const getResponse = (): FinalResponse => {
  return getFinalResponse({ accept_card_payments: false });
};
function assertFinalResponse(
  obj: any,
  query: QueryResponse
): asserts obj is FinalResponse {
  const finalResponseKey = Object.keys(obj)[0];
  if (!Reflect.has(query, kebabCase(finalResponseKey))) {
    throw new Error("Not the right object!");
  }
}

const getResponse2 = (): FinalResponse => {
  const query = { accept_card_payments: false };
  const potentiallyFinal = mapKeys(camelCase)(query);
  assertFinalResponse(potentiallyFinal, query);
  return potentiallyFinal;
};