Búsqueda de sitios web

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

Artículos relacionados