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.comments
correctamente, debe agregar algo de restricción.