TS2322:类型 'number | boolean' 不可分配给发生'undefined'类型



我试图通过将输入对象的键从camel大小写映射到snake大小写来输出一个新对象。

TypeScript 4.6.0在条件类型上具有尾部递归消除

转换似乎可以

type CamelToSnake<T extends string, P extends string = ''> = string extends T
? string
: T extends `${infer C0}${infer R}`
? CamelToSnake<R, `${P}${C0 extends Lowercase<C0> ? '' : '_'}${Lowercase<C0>}`>
: P
type CamelKeysToSnake<T> = {
[K in keyof T as CamelToSnake<Extract<K, string>>]: T[K]
}

type TInput = {
defaultVisible: boolean
defaultSize: number
}

type TOutput = CamelKeysToSnake<TInput>

function toSnakeCase(str: string) {
var temp = str.replace(/[A-Z]/g, function (match) { 
return "_" + match.toLowerCase();
});
if(temp.slice(0,1) === '_'){
temp = temp.slice(1);
}
return temp;
};
function test(input: Partial<TInput>){
const output: Partial<TOutput>={}
for (const [key, value] of Object.entries(input)) {
const snakeKey = toSnakeCase(key) as keyof TOutput
if (value !== undefined) output[snakeKey] = value
}
}

但在代码行中

if (value !== undefined) output[snakeKey] = value

出现意外错误

Type 'number | boolean' is not assignable to type 'undefined'.
Type 'number' is not assignable to type 'undefined'.(2322)

为什么会发生这种事?我该怎么修?

**仅解决**

我认为发生这种情况是因为属性snakeKey有一个未定义的相关类型

我不知道如何修复属性类型,但你可以使用来解决这个问题

if (value !== undefined) Object.defineProperty(output, snakeKey, { value })

相关内容

  • 没有找到相关文章

最新更新