我正在開發使用 Typescript 和 webpack 的專案。我必須匯入 json 檔案,我必須通過兩種方式來做到這一點:
- 我必須將專案
package.json作為模塊匯入。這在之前已經實作。 - 必須匯入一些 json 模式作為可通過 url 加載的資源。這就是我現在正在做的事情。
使用package.json(已經實作)
要匯入package.json,tsconfig.json包含:
{
"compilerOptions": {
"resolveJsonModule": true,
"paths": {
"package.json": ["./package.json"]
}
},
}
webpack 配置有:
/**
* Determine the array of extensions that should be used to resolve modules.
*/
resolve: {
extensions: [".js", ".ts", ".tsx", ".json"],
plugins: [
new TSConfigPathsPlugin({
configFile: path.join(__dirname, "../../tsconfig.json"),
logLevel: "info",
extensions: [".js", ".jsx", ".ts", ".tsx"],
mainFields: ["browser", "main"],
baseUrl: tsConfig.baseUrl,
}),
],
},
這是如何package.json使用的:
import packageJson from "package.json";
//...
const release = `${packageJson.version}-${process.platform}`;
這是完全型別安全的: ts 檢查我的package.jsonhasversion欄位。這是按預期作業的,我不想破壞它。
使用模式 json 檔案(我正在實作的)
為了添加對 json 模式的支持,我添加了它們與檔案名匹配.schema.json$并將其添加到 webpack 配置中:
module: {
rules: [
{
test: /\.schema.json$/,
type: "asset/resource",
},
],
},
這是一個全域型別宣告檔案:
declare module "*.schema.json" {
declare const uri: string;
export default uri;
}
我認為通過這樣做,Typescript 會將匯入這樣的檔案解釋為一個簡單的字串。我一直在關注這個例子。
但是,當我在專案中匯入架構檔案時:
import someSchemaUri from "./schemas/some-name.schema.json";
// ...
uri = someSchemaUri;
我仍然收到型別錯誤:
型別“{ ... }”不可分配給型別“字串”。
改變resolveJsonModule
如果我resolveJsonModule為這個問題設定選項false,消失,但從package.json上一節匯入開始給出錯誤:
模塊“package.json”被決議為“secret/path/package.json”,但不使用“--resolveJsonModule”。
如何配置我的專案,以便 Typescript 將這些檔案解釋為string,但在某些情況下,當我從上一節匯入時不會失去型別安全性package.json?
uj5u.com熱心網友回復:
據我所知,一旦設定,就無法覆寫 json 型別--resolveJsonModule。您是否可以考慮禁用該標志并手動為 package.json 撰寫型別?package.json由于您只使用一個欄位,因此并不耗時。
declare module '*.schema.json' {
const uri: string;
export default uri;
}
declare module '*package.json' {
const content: {
version: string;
};
export default content;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/482264.html
上一篇:隔離webpack專案中使用的庫
