es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

KotlinJS + Typescript: No se encuentra la referencia a TraceBase en el archivo d.ts de Atomicfu.

Con cualquiera de las dependencias coroutine o ktor, cuando se publique la biblioteca de npm KotlinJS, en el archivo d.ts de TypeScript resultante generado habrá referencias a atomicfu.

export namespace kotlinx.atomicfu {
    function atomic$ref$<T>(initial: T, trace: kotlinx.atomicfu.TraceBase): kotlinx.atomicfu.AtomicRef<T>;
    function atomic$boolean$(initial: boolean, trace: kotlinx.atomicfu.TraceBase): kotlinx.atomicfu.AtomicBoolean;
    function atomic$int$(initial: number, trace: kotlinx.atomicfu.TraceBase): kotlinx.atomicfu.AtomicInt;
    function atomic$long$(initial: kotlin.Long, trace: kotlinx.atomicfu.TraceBase): kotlinx.atomicfu.AtomicLong;
}

Sin embargo, la referencia a TraceBase falta en el archivo y al compilar una aplicación de TypeScript que depende de la biblioteca de kotlinJS mencionada anteriormente, se produce un error por no encontrar TraceBase.

La única forma de avanzar es agregar skipLibCheck = true en el archivo tsconfig. Sin embargo, esta no es una solución ideal para los usuarios de la biblioteca.

¿Hay alguna manera de resolver este problema?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una forma de resolver este problema. Implica agregar manualmente la referencia faltante TraceBase al archivo d.ts generado.

    Primero, debes encontrar la definición de la interfaz TraceBase en la biblioteca kotlin-stdlib. Esto se puede hacer buscando TraceBase en el código fuente de Kotlin en GitHub. Una vez que encuentres la definición, puedes copiarla en un nuevo archivo llamado atomicfu.d.ts.

    Luego, en el archivo d.ts generado para la biblioteca kotlinJS, debes agregar una referencia al archivo atomicfu.d.ts. Esto se puede hacer con una directiva de referencia de triple barra:

    /// <reference path="./atomicfu.d.ts"></reference>
    

    Esto le indica al compilador de TypeScript que incluya el archivo atomicfu.d.ts al compilar la biblioteca kotlinJS.

    Con esta configuración, el compilador de TypeScript tendrá acceso a la definición de la interfaz TraceBase y no se quejará por las referencias faltantes. Puedes eliminar la opción skipLibCheck = true de tu archivo tsconfig y tus usuarios ya no tendrán que usarlo tampoco.

Comments are closed.