オブジェクトを記述するjsonスキーマがありますPerson。私は直接typescriptファイルにこのように、そのスキーマをロードできるようにしたいと思います:このためjsonスキーマをwebpackでtypescriptに動的に読み込む方法
import Person from './schema/person.schema.json';
を、Iは(json-schema-to-typescriptを使用して)typescriptですインターフェイス宣言にJSONファイルを変換ローダを作成し、合格しますts-loaderの結果。
私のWebPACKがこのように設定されています。
webpack.config.js(抜粋)
module: {
rules: [
{
test: /\.ts$/,
loader: 'ts-loader',
},
{
test: /\.schema\.json$/,
loader: 'ts-loader!jsonschema-loader',
exclude: /(node_modules)/,
},
]
},
をこのquestion次のようなJSONファイルは文字列とみなされるように、私は宣言を構成し:
宣言.dts:
declare module '*.schema.json' {
const schema: string;
export default schema;
}
私のローダーは、処理中のファイル名を変更するので、ts-loaderがロードすると考えるものはperson.schema.ts
です。さらに、ローダーの結果が正しいことを確認しました。しかし、
/**
* This file was automatically generated by json-schema-to-typescript.
* DO NOT MODIFY IT BY HAND. Instead, modify the source JSONSchema file,
* and run json-schema-to-typescript to regenerate this file.
*/
export interface Person {
firstName: string;
lastName: string;
/**
* Age in years
*/
age?: number;
[k: string]: any;
}
私は私のプロジェクトをビルドするとき、人はオブジェクトとして認識されていないとコンパイルが失敗します:ここにある
import Person from './schema/person.schema.json';
const person: Person = {
lastName: 'Doe',
firstName: 'John',
};
console.log(person);
コンパイルがで失敗
index.js :
ERROR in ./src/index.ts
(3,15): error TS2304: Cannot find name 'Person'.
私はe私の宣言で文字列として.schema.jsonファイルのxportを使用すると、ローダーはファイル名(this.resourcePath)をtsファイルに動的に変更し、ts-loaderはそれを標準のtsファイルとして参照し、Personオブジェクトをエクスポートする必要があります。
私は間違っていますか?
help https://stackoverflow.com/q/31173738/794088 – petey
人はデフォルトエクスポートではないので、plsはtry:{./schema/person.schema.json 'からimport {Person}を実行します。 – Daniel
@Daniel実際には、彼は 'default interface Person'をエクスポートする必要があります –