我正在將 Node v18.0.0 與 TypeScript 一起使用,并且該類似乎TextEncoder是一個全域.
不幸的是,此代碼const textEncoder = new TextEncoder();無效,因為它不知道該類。我將不得不匯入 util 包以使其作業,否則我會收到錯誤
找不到名稱“TextEncoder”。你是說'textEncoder'嗎?ts(2552)
我正在使用包"@types/node": "17.0.23"和"typescript": "4.6.3". tsconfig.json 檔案
{
"compilerOptions": {
"baseUrl": ".",
"declaration": true,
"esModuleInterop": true,
"lib": [ "esnext" ],
"module": "commonjs",
"outDir": "build",
"resolveJsonModule": true,
"strict": true,
"target": "es2019"
},
"include": [
"./**/*.ts"
],
"exclude": [
"./build"
]
}
有人知道如何解決這個問題嗎?我是否必須使用一些額外的包或修改我的 TS 配置?
如果您需要更多資訊,請告訴我!
uj5u.com熱心網友回復:
這看起來(至少)在 Node.js 檔案(和運行時)和 DefinitiveTyped 中的@types/node包之間存在不一致。這個問題與這個問題非常相似,這個URL問題已經通過global在url.d.ts. 打開一個問題(并做一個公關)可能是值得的。
正如您所說,TextEncoder它絕對是一個全球性的(檔案和快速測驗都告訴我們),但@types/node/globals.d.ts沒有它。@types/node/utils.d.ts確實有它(如你所指出的),甚至有評論“TextEncoder該類也可用于全域物件。” 但是......它不是(不像URL[現在] 是)。
如果您正在撰寫的代碼是特定于 Node.js 的,那么我只需進行匯入而不用擔心它。
但是,如果您撰寫的代碼應該同時針對 Node.js 和瀏覽器,那顯然不是一個選擇。URL問題執行緒中提到的一種解決方法是添加"dom"到您的lib配置設定中,但這意味著所有 DOM 內容都將添加到您的全域命名空間中。
或者,直到/除非型別被更新,您可以自己宣告全域。在專案的根目錄中:
whatever.d.ts:
import { TextEncoder as _TextEncoder } from "node:util";
declare global {
var TextEncoder: typeof _TextEncoder;
}
當您這樣做時,您不會獲得有用的彈出資訊new TextEncoder(,但它確實有效,并且您確實獲得了有關其方法等的有用資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/463742.html
標籤:javascript 节点.js 打字稿
