簡體   English   中英

如何在 nodejs 16 中導入具有類型的模塊?

[英]How do I import a module with type in nodejs 16?

所以,我使用Node16 /打字稿,我試圖進口discord.js

我想使用import語法,而不是require因為我更習慣它,並且還會導致 TS 自動添加我導入的類型。

但遺憾的是,它是如此混亂,而且有太多的 import/require 語法,我永遠不知道該怎么做。

所以我這樣做了:

import dotenv from 'dotenv';
import { Client, Intents } from 'discord.js';

使用簡單的 tsconfig

        "target": "es2020"
        "module": "es2020" 
        "moduleResolution": "node"

但是當我運行我的代碼時它失敗了。

類型錯誤:無法讀取 file:///C:/Users/xxxx/Documents/Repository/xxxx/node_modules/@discordjs/builders/dist/index.mjs:1:831 at ModuleJob 的未定義屬性(讀取 'minLength') .run (node:internal/modules/esm/module_job:185:25) at async Promise.all (index 0) at async ESMLoader.import (node:internal/modules/esm/loader:281:24) at async loadESM ( node:internal/process/esm_loader:88:5) 在 async handleMainPromise (node:internal/modules/run_main:65:12)

我知道discord.js導出為CommonJS的,所以我使用的require來代替。

現在代碼可以工作了,但是找不到我導入的類型,並且 eslint 抱怨

Require 語句不是 import 語句的一部分。

我嘗試了所有其他導入/需要解決方案,但仍然沒有任何效果,要么需要type : module in package.json 但代碼不起作用,要么抱怨我如何導入東西...

基本上,如果我使用我想要的方式import { Client, Intents } from 'discord.js'; 代碼不工作,但編譯器和 VsCode 自動完成所有內容並知道類型(並且 eslint 沒有錯誤)

const Discord = require('discord.js'); 將沒有類型,eslint 會抱怨,但代碼會工作......

我該怎么辦 ?

您的tsconfig.json有問題。
它應該是:

"target": "es2015"

更改后,再次運行tsc -p tsconfig.json

目標意味着打字稿被編譯到該目標。 通常我們為此使用 es2015 來最大化支持的平台。 你想要的是lib

"target": "es2015",
"lib": ["es2020"]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM