Из-за быстрого ознакомления с этими пакетами readme, это, кажется, опережающий инструмент генерации кода. Как я уже упоминал в этом вопросе, я уже знаю, что могу запустить команду, которая генерирует файлы и затем регистрирует их, но я ищу более динамичное решение.

аюсь создать загрузчик веб-пакетов, который преобразует файл, содержащий описание структур данных API, в набор интерфейсов TypeScript.

В моем конкретном случае файл представляет собой JSON, но это в конечном итоге не имеет значения - файл является лишь общим источником данных, описывающих взаимодействие между бэкэндом (-ами) веб-приложения и веб-интерфейсом (-ами). В моем MCVE ниже вы можете видеть, что файл JSON содержит пустой объект, чтобы подчеркнуть, как тип и содержимое файла не имеют значения для проблемы.

Моя текущая попытка сообщает о двух ошибках (я полагаю, что вторая вызвана первой):

[at-loader]: Child process failed to process the request:  Error: Could not find file: '/private/tmp/ts-loader/example.api'.
ERROR in ./example.api
Module build failed: Error: Final loader didn't return a Buffer or String

Как я могу сгенерировать код TypeScript с помощью загрузчика веб-пакетов?

package.json
{
  "name": "so-example",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "scripts": {
    "build": "webpack"
  },
  "dependencies": {
    "awesome-typescript-loader": "^3.2.3",
    "typescript": "^2.6.1",
    "webpack": "^3.8.1"
  }
}
webpack.config.js
const path = require('path');

module.exports = {
  entry: './index.ts',
  output: {
    filename: 'output.js',
  },
  resolveLoader: {
    alias: {
      'my-own-loader': path.resolve(__dirname, "my-own-loader.js"),
    },
  },
  module: {
    rules: [
      {
        test: /\.api$/,
        exclude: /node_modules/,
        use: ["awesome-typescript-loader", "my-own-loader"],
      },
      {
        test: /\.tsx?$/,
        exclude: /node_modules/,
        loader: "awesome-typescript-loader",
      },
    ]
  },
};
мой-собственный loader.js
module.exports = function(source) {
  return `
interface DummyContent {
    name: string;
    age?: number;
}
`;
};
index.ts
import * as foo from './example';

console.log(foo);
example.api
{}

Я признаю, что существуют другие методы генерации кода. Например, я мог бы преобразовать мои файлы JSON в TypeScript с помощью какого-либо инструмента сборки и проверить их. Я ищу более динамичное решение.

my-own-loader.js экспортирует не json, а строку.

Это правильно, так же как загрузка файла изображения не всегда экспортирует двоичные данные, но иногда выводит структуру данных JavaScript, представляющую метаданные об изображении.

Почему вам нужно определить интерфейсы машинописного текста из файла json? Будут ли интерфейсы использоваться для компиляции машинописи?

Да. Я хочу импортировать файл, который описывает мои структуры данных API и автоматически генерировать соответствующие интерфейсы TypeScript. Наличие общего файла позволяет фронтэнду (-ам) и бэкэнду (-ам) всегда согласовывать, какие данные будут присутствовать.

Ответы на вопрос(2)

Ваш ответ на вопрос