我正在从事使用Typescript和webpack的项目.我必须导入json文件,我必须通过两种方式来完成:
- 我必须导入项目的
package.json
作为一个模块.这已经在以前实施过. - 必须导入一些json模式作为可由url加载的资源.这就是我现在正在做的.
Using package.json
(already implemented)
要导入package.json
,tsconfig.json
包含:
{
"compilerOptions": {
"resolveJsonModule": true,
"paths": {
"package.json": ["./package.json"]
}
},
}
而网页包配置具有:
/**
* 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判断my package.json
是否有version
字段.这是预期的工作,我不想打破它.
Using schema json files (what I'm implementing)
为了添加对json模式的支持,我添加了与.schema.json$
匹配的文件名,并将其添加到webpack config中:
module: {
rules: [
{
test: /\.schema.json$/,
type: "asset/resource",
},
],
},
并将其转换为全局类型声明文件:
declare module "*.schema.json" {
declare const uri: string;
export default uri;
}
我认为通过这样做,Typescript将把导入这样一个文件解释为一个简单的字符串.我一直在跟踪this example人.
但是,当我在项目中导入架构文件时:
import someSchemaUri from "./schemas/some-name.schema.json";
// ...
uri = someSchemaUri;
我仍然收到类型错误:
键入"{…}"未分配
Changing resolveJsonModule
如果我将resolveJsonModule
选项设置为false,
,这个问题就会消失,但从上一节导入package.json
会出现错误:
模块包.json"已解析为"secret/path/package.json",但未使用"-resolveJsonModule".
如何配置我的项目,以便Typescript将这些文件解释为string
,但在我从上一节导入package.json
时,某些文件不会失go 类型安全性?