Quiero eliminar la clave de un objeto del objeto si su valor es nulo y el tipo de clave es opcional.
por ejemplo, tengo una interfaz del objeto como esta:
Interface IObject { amount: number; plan: IPlan; achieve: IAchieve; status?: string; rank?: number; } Interface IPlan { year: string | null; name: string; date?: Date; grade?: number; } Interface IAchieve { pic: string; name?: string; date?: Date; grade?: number; }y tiene valor:
let data: IObject = { amount: 2300; plan: { year: null; name: 'renov'; date: null; grade: 3; }; achieve: { pic: 'John'; name: null; date: null; grade: 3; }; status: 'good'; rank: null; };lo que hice:
Object.keys(data).forEach(obj => { if (typeof data[obj as keyof typeof IObject] === 'object') { Object.keys(data[obj as keyof typeof any]).forEach(obj2 => { if (data[obj as keyof typeof any][obj2] == undefined) { delete data[obj as keyof typeof any][obj2]; } }); } else if (data[obj as keyof typeof any] == undefined) delete data[obj as keyof typeof any]; });pero obtengo:
"Error de tipo: no se puede convertir indefinido o nulo en objeto"
Estoy esperando resultado:
data = { amount: 2300; plan: { year: null; name: 'renov'; grade: 3; }; achieve: { pic: 'John'; grade: 3; }; status: 'good'; };Hay algunos problemas con esta pregunta.
interface no Interface ., use un separador entre campos en lugar de ; .date?: Date debe aceptar Date e undefined . Si desea incluir null , ¿debe escribirlo como date?: Date | nullnull e undefined .typeof solo se puede usar para recuperar el tipo de una variable o propiedad. typeof IObject intentaría obtener el tipo de una interfaz, lo que no funcionará.obj as keyof typeof any .Quiero eliminar la clave de un objeto del objeto si su valor es nulo y el tipo de clave es opcional.
Si entiendo esta línea correctamente, entonces está intentando usar la definición de la interfaz para hacer algo en tiempo de ejecución.
Esto no funcionará, después de que el mecanografiado se haya compilado en javascript, las interfaces ya no estarán presentes en su código.
Consulte Conceptos básicos: tipos borrados .
Deberá abordar este problema desde un ángulo diferente.
¿Quizás podría eliminar todos los campos con un valor null de su objeto sin importar qué? Si su escritura es correcta, entonces esto solo debería tocar los campos que realmente aceptan valores NULL.