Entonces, estoy usando Node16/Typescript y estoy tratando de importar discord.js .
Me gustaría usar la sintaxis de import , y no la require , ya que estoy más acostumbrado, y también hace que TS agregue automáticamente los tipos de lo que importo.
Pero lamentablemente, es un desastre, y hay tanta sintaxis de importación/requerimiento que nunca sé qué hacer.
Así que hice esto:
import dotenv from 'dotenv'; import { Client, Intents } from 'discord.js';con el simple tsconfig
"target": "es2020" "module": "es2020" "moduleResolution": "node"pero cuando ejecuto mi código falla.
TypeError: no se pueden leer las propiedades de undefined (leyendo 'minLength') en file:///C:/Users/xxxx/Documents/Repository/xxxx/node_modules/@discordjs/builders/dist/index.mjs:1:831 en ModuleJob .run (node:internal/modules/esm/module_job:185:25) en async Promise.all (índice 0) en async ESMLoader.import (node:internal/modules/esm/loader:281:24) en async loadESM ( node:internal/process/esm_loader:88:5) en asincrónico handleMainPromise (node:internal/modules/run_main:65:12)
Sé que discord.js se exporta como commonJs, así que usé require en su lugar.
Ahora el código funciona, pero no se encuentra el tipo para lo que importo, y eslint se queja de
Requerir declaración que no sea parte de la declaración de importación.
Intenté todas las demás soluciones de importación/requerimiento pero aún nada funciona, o requiere type : module en package.json pero el código no funcionará, o me quejo de cómo importo cosas...
básicamente, si uso la forma en que quiero import { Client, Intents } from 'discord.js'; el código no funciona pero el compilador y VsCode autocompletan todo y conocen el tipo (y eslint no tienen error)
const Discord = require('discord.js'); no tendrá tipos, eslint se quejará pero el código funcionará...
Qué tengo que hacer ?
target significa que TypeScript se compila para ese destino. Usualmente usamos es2015 para este propósito para maximizar las plataformas compatibles. Lo que quieres es lib .
"target": "es2015", "lib": ["es2020"]Hay un problema con su tsconfig.json .
Debería ser:
"target": "es2015" Después de cambiar esto, ejecute tsc -p tsconfig.json nuevamente.