У меня есть схема json, описывающая объект Person. Я хотел бы иметь возможность загружать эту схему в файл машинописного текста напрямую следующим образом:
import Person from './schema/person.schema.json';
Для этого я создал загрузчик, который преобразует файл json в объявление интерфейса typescript (используя json-schema-to-typescript), а затем передать результат ts-loader.
Мой веб-пакет настроен следующим образом:
webpack.config.js (выдержка)
module: {
rules: [
{
test: /\.ts$/,
loader: 'ts-loader',
},
{
test: /\.schema\.json$/,
loader: 'ts-loader!jsonschema-loader',
exclude: /(node_modules)/,
},
]
},
Следуя этому вопросу, я настроил объявление, чтобы файл json считался строкой :
declaration.d.ts:
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;
}
Однако, когда я создаю свой проект, Person не распознается как объект, и компиляция завершается ошибкой:
index.js
import Person from './schema/person.schema.json';
const person: Person = {
lastName: 'Doe',
firstName: 'John',
};
console.log(person);
компиляция не работает с:
ERROR in ./src/index.ts
(3,15): error TS2304: Cannot find name 'Person'.
Хотя я определяю экспорт файла .schema.json как строку в своем объявлении, мой загрузчик динамически меняет имя файла (this.resourcePath) на файл ts, поэтому ts-загрузчик должен видеть его как стандартный файл ts и экспортировать объект Person. .
Что я делаю не так?
export default interface Person
- person Aluan Haddad   schedule 27.12.2017