typescript - ¿Puedo usar archivos de declaración de tipos de node_modules sin importar los módulos reales?
Estoy cargando la biblioteca de imágenes teachable machine usando una etiqueta de script:
<script src="https://cdn.jsdelivr.net/npm/@teachablemachine/[email /dist/teachablemachine-image.min.js"></script>
En mi proyecto de TypeScript, utilizo el código tmImage de la siguiente manera:
let model = await tmImage.load(modelURL, metadataURL)
Lo cual da este error en Typescript:
cannot find name `tmImage`
Así que necesito archivos de declaración de tipos, que no están disponibles en https://github.com/DefinitelyTyped/, pero SÍ están disponibles en el módulo real. Así que lo instalé usando:
npm install @teachablemachine/image
Ahora, dentro de node_modules hay muchos archivos .d.ts que se referencian entre sí y que contienen toda la información de tipos necesaria.
Supuse que Visual Studio Code captaría automáticamente toda la información de los archivos .d.ts en mi proyecto, pero esto solo ocurre cuando realmente importo los módulos con:
import * as tmImage from '@teachablemachine/image';
Ahora los tipos SÍ se reconocen muy bien con la finalización de código, ¡pero también necesito compilar el código de la máquina enseñable junto con mi propio código!
¿Es posible usar solo la información de tipos de node_modules durante el tiempo de desarrollo, o necesito abandonar mi etiqueta <script> y compilar todo el código de teachable machine yo mismo, solo porque uso Typescript?
Respuesta #1
No estás compilando la biblioteca cada vez, solo la estás importando. La biblioteca ya está compilada dentro de node_modules. Así que puedes usar las importaciones y excluirlas de tu empaquetador si estás usando uno.
Si quieres que los tipos estén disponibles globalmente, necesitas agregar un archivo .d.ts a tu proyecto. TS no asume que un tipo está disponible solo porque esté en node_modules, pero puedes agregarlo extendiendo el espacio de nombres global de esta manera:
// In a `.d.ts` file within the included folders of your project
import * as _tmImage from '@teachablemachine/image';
declare global {
const tmImage: typeof _tmImage;
}
