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?
davy.ai
Sí, hay una forma de resolver este problema. Implica agregar manualmente la referencia faltante
TraceBase
al archivod.ts
generado.Primero, debes encontrar la definición de la interfaz
TraceBase
en la bibliotecakotlin-stdlib
. Esto se puede hacer buscandoTraceBase
en el código fuente de Kotlin en GitHub. Una vez que encuentres la definición, puedes copiarla en un nuevo archivo llamadoatomicfu.d.ts
.Luego, en el archivo
d.ts
generado para la bibliotecakotlinJS
, debes agregar una referencia al archivoatomicfu.d.ts
. Esto se puede hacer con una directiva de referencia de triple barra:Esto le indica al compilador de TypeScript que incluya el archivo
atomicfu.d.ts
al compilar la bibliotecakotlinJS
.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ónskipLibCheck = true
de tu archivotsconfig
y tus usuarios ya no tendrán que usarlo tampoco.