Mecanografiado cómo escribir el resto de parámetros en el objeto

Nov 26 2020
  function test(data){
      console.log(data)
  }

  test({comments: 'hi', eat: true, sleep: true})

En la función de prueba, estoy seguro de que aparecerá el argumento de comentario, donde, al igual que para otros argumentos, las propiedades pueden ser dinámicas pero el valor será de tipo booleano,

  test({comments: 'hi', drink: true, sleep: true})

teniendo en cuenta esta situación, ¿cómo debo escribir correctamente los datos? He intentado algo como esto, pero me parece mal

function(data: {data: {comments: string, [key: string]: boolean})

Respuestas

1 НиколайГольцев Nov 26 2020 at 17:55

Puedo sugerirte algún tipo de solución:

function test<T extends {
  [key: string]: any;
}>(data: { comments: unknown } & { [key in keyof T]: key extends "comments" ? string : boolean }) {
  const comments = data.comments as string;
  console.log(comments);
  console.log(data.eat);
  console.log(data.sleep);
}

test({comments: "hi"}); // works
test({comments: "hi", eat: true}); // works
test({comments: true}); // doesn't works
test({comments: 5}); // doesn't works
test({comments: "hi", eat: "true"}); // doesn't works
test({comments: "hi", eat: 5}); // doesn't works

Escribió bien fuera del cuerpo de la función, pero en el cuerpo de la función para escribir data.commentscorrectamente, debe agregar algo de restricción.