É possível gerar interfaces Typescript a partir de arquivos com um carregador de webpack?

Estou tentando criar um carregador de webpack que converte um arquivo que contém uma descrição das estruturas de dados da API em um conjunto de interfaces TypeScript.

No meu caso concreto, o arquivo é JSON, mas isso deve ser irrelevante - o arquivo é apenas uma fonte compartilhada de dados que descreve a interação entre os aplicativos e os aplicativos da Web. No meu MCVE abaixo, você pode ver que o arquivo JSON contém um objeto vazio para destacar como o tipo e o conteúdo do arquivo não importam para o problema.

Minha tentativa atual relata dois erros (presumo que o segundo seja causado pelo primeiro):

[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

Como posso gerar código TypeScript usando um carregador de webpack?

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",
      },
    ]
  },
};
my-own-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
{}

Reconheço que existem outras técnicas de geração de código. Por exemplo, eu poderia converter meus arquivos JSON em TypeScript com alguma ferramenta de construção e verificá-los. Estou procurando uma solução mais dinâmica.

my-own-loader.js não exporta json, mas string.

Isso está correto, assim como carregar um arquivo de imagem nem sempre exporta dados binários, mas às vezes gera uma estrutura de dados JavaScript que representa metadados sobre a imagem.

Por que você precisa definir as interfaces de texto datilografado do arquivo json? As interfaces seriam usadas para compilação datilografada?

Sim. Quero importar um arquivo que descreva minhas estruturas de dados da API e gere automaticamente as interfaces TypeScript correspondentes. Ter um arquivo compartilhado permite que o front-end e o back-end concordem sempre com os dados que estarão presentes.

questionAnswers(2)

yourAnswerToTheQuestion