javascript - El tipo '{}' carece de las siguientes propiedades del tipo ts(2739)
Tengo una función que crea datos estructurados a partir de rawData (de la API)
function makeData(raw:typeof rawData){
const data:IData = {} // this line throws above error.
const now = new Date()
data.createdAt=now.toDateString();
data.currentUser=raw.name;
data.uniqueId= raw.id + now.toDateString();
return data
}
Mientras estoy creando los datos, estoy usando un objeto vacío al principio y lo tipifico con IData para que el valor de retorno de la función tenga el tipo IData. Pero como se mencionó, esto está generando un error.
interface IData {
createdAt:string;
currentUser:string;
uniqueId:string;
}
Uso :
const {createdAt, currentUser,uniqueId} = makeData(rawData)
Intenté eliminar IData por completo y luego obtuve el siguiente error.
Property 'createdAt' does not exist on type '{}'. // got the same error for other properties as well ( currentUser, uniqueId )
Obteniendo el mismo error o errores en la línea donde se realiza la destrucción.
Tengo una solución provisional por ahora:
const data : Record<string,unknown>= {}
Pero esto no parece ser más convincente para mí.
¿Hay una mejor manera de escribir datos como IData?
Demostración en vivo.
Respuesta #1
Aquí, mientras estás anotando datos como IData. Se espera que el objeto contenga todas las propiedades requeridas. (en este caso: createdAt, currentUser, uniqueId)
Puedes hacer 2 cosas.
1: Puedes hacer una afirmación de tipo.
const data = {} as IData.
2: Inicializa el objeto con valores vacíos.
const data:IData = {
createdAt:"",
currentUser:"",
uniqueId:""
}
Respuesta #2
no puedes definir una constante de IData sin especificar los datos dentro de ella, en su lugar puedes hacer algo como esto
function makeData(raw: typeof rawData): IData{
const now = new Date()
return {
createdAt: now.toDateString(),
currentUser: raw.name,
uniqueId: raw.id + now.toDateString()
}
}
