我有一個配置了獨立庫包(僅限 TS)和另一個 Web UI 包(TS React)的單回購專案。
我正在從消費者(Web UI)包中匯入編譯后的庫包。為此,我使用紗線鏈接包和包裹以生成庫包的分發檔案。
Parcel 會d.ts在庫包的dist檔案夾中自動生成一個檔案。
我使用 VS Code 作為 IDE,當我打開匯入庫并使用它的消費者包檔案時,VS Code 無法識別庫包d.ts檔案中宣告的型別。
這是包的結構:
rootPackage
|- library
|- web-ui
在library包中,我有一個types.ts檔案和一個index.ts檔案。只有一種型別被匯出:
export type ParamType = "a" | "b" | "c";
我parcel watch在這個包上使用它dist在某些內容發生更改時自動重繪 檔案。
Parcel 正在生成main.d.ts檔案,并且該檔案正在被package.json'stypes屬性參考。
當我嘗試ParamType通過web-ui包的代碼使用此型別時,我在型別中突出顯示了以下 IDE 錯誤:
Cannot find name 'ParamType'.ts(2304)
當我在包中運行web-ui包時,它編譯得很好,瀏覽器加載時沒有問題/警告。
我認為這是一個專門與 VS Code 相關的問題,我不知道如何解決它。
編輯 1
我在 GitHub 上創建了一個公共存盤庫來演示這個問題。如果您知道如何修復它,請隨時創建拉取請求,這將非常有幫助。
uj5u.com熱心網友回復:
從您的示例 repo 中,您的library包的根目錄如下所示:
/shared/lib/src/index.ts
import { ParamType } from "./types";
const Library = {
typedParamMethod(param: ParamType) {
console.log(param);
},
};
export default Library;
你在library包中使用web-ui包的方式是這樣的:
/ui/web/src/App.tsx
import React from 'react';
import Library from 'library';
function App() {
React.useEffect(() => {
const typedParam: ParamType = 'b'; // VSCode and tsc throw the error "Cannot find name 'ParamType'."
Library.typedParamMethod(typedParam);
}, []);
return (
<div className="web-ui">Web UI</div>
);
}
export default App;
問題是您既沒有ParamType從library包的根目錄匯出,也沒有將其匯入到web-ui包中。現代 JavaScript 和 Typescript 模塊彼此隔離 -包根目錄中的import { ParamType } from "./types"行在該檔案中可用,但它不會影響(或污染)碰巧匯入其他內容(例如默認匯出)的內容的全域命名空間從包。libraryParamTypelibrary
要解決此問題,請將此行添加到library包根目錄(例如/shared/lib/src/index.ts):
export { ParamType } from "./types.ts";
然后修改web-ui包中的匯入(/ui/web/src/App.tsx改為:
import Library, { ParamType } from 'library';
(問題和解決方案與 VSCode 無關 - 任何嘗試對web-ui包進行型別檢查的內容都將發出相同的錯誤,沒有這些更改)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/365414.html
