Búsqueda de sitios web

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()
    }
    
}

Artículos relacionados