Problemas de Pick en Typescript
Mi bloque de código simplificado es como el siguiente
interface A {
val: string;
// Other optional parameters
}
function usingObject(obj: A) {
return obj.val
}
function usingVal(val: Pick<A, 'val'>) {
return usingObject({ val })
}
Estoy recibiendo el siguiente error
Type 'Pick<A, "val">' is not assignable to type 'string'.ts(2322)Quiero una función que pueda aceptar un objeto y otra función que tome cada parámetro obligatorio como argumento
Respuesta #1
Esto se debe a que Pick nos está devolviendo { key: type } pero no solo el type. En este caso
interface A {
val: string;
}
Pick<A, 'val'>
// returns -> { val: string }
// but not -> string
Entonces vas a hacer
function usingVal({ val }: Pick<A, 'val'>) {
return usingObject({ val })
}
or
function usingVal(val: Pick<A, 'val'>) {
return usingObject({ val: val.val })
}
Respuesta #2
El tipo de resultado de Pick<A, 'val'> es esencialmente el mismo que interface A. En otras palabras, Pick<...> construye un nuevo tipo de objeto.
Parece que lo siguiente funcionaría para ti:
function usingVal(val: string) {
return usingObject({ val })
}
