我正在try 编写一个打字脚本函数,将驼峰大小写转换为蛇形大小写.该函数应该能够处理对象和对象array.我希望将输入和输出类型指定为泛型.如果输入不是对象或对象数组,我只想原封不动地返回输入值.
我面临的问题是,由于返回类型是一个联合类型,TypeScript在使用函数时不知道返回的是哪个类型.
以下是我目前的实现:
function deepConvertToSnakeCase<I, O>(item: I): I | O {
if (Array.isArray(item)) {
return item.map((el) => deepConvertToSnakeCase(el)) as O;
}
if (item !== Object(item)) {
return item as I;
}
return Object.fromEntries(
Object.entries(item as Array<[string, unknown]>).map(([key, value]) => [
key.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase(),
deepConvertToSnakeCase(value)
])
) as O;
}
// usage
interface CamelCaseObject {
keyItem: 'value';
keyItemAlso: 'value';
}
interface SnakeCaseObject {
key_item: 'value';
key_item_also: 'value';
}
const data: CamelCaseObject = {
keyItem: 'value',
keyItemAlso: 'value'
};
const convertedData = deepConvertToSnakeCase<CamelCaseObject, SnakeCaseObject>(data);
// Result: convertedData type is CamelCaseObject | SnakeCaseObject
// Expected result: convertedData type is SnakeCaseObject
编辑:最小可重现示例 编辑:问题编辑