lodash的mapKeys(camelcase)出现TypeScript错误[TS2741]
我正在尝试键入我的对象,但typescript似乎对此不满意: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
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;
};