TypeScript: абстрактный класс не определен при создании дочернего класса (прототипом объекта может быть только объект или значение null: не определено)

#typescript #web #webpack

#typescript #web #webpack

Вопрос:

Я создал фреймворк под названием «tyframe» как monorepo, используя lerna. (https://github.com/tyframe/tyframe ) В настоящее время существует два пакета «core» и «example». Последний имеет отступ для демонстрации и работает, как ожидалось.

Теперь я хочу использовать пакет «@tyframe / core» в другом веб-проекте, но безуспешно.

Проблема:

Мой класс App наследует от класса AbstractApplication, но во время выполнения AbstractApplication не определено, и я получаю сообщение об ошибке «Прототип объекта может быть только Object или null: undefined».

Чтобы продемонстрировать проблему и сделать ее понятной, я создал минимальный пример на Stackblitz: https://stackblitz.com/edit/typescript-av2uka?devtoolsheight=33amp;file=index.ts

Есть ли что-нибудь еще, что следует учитывать при публикации моей платформы, чтобы я мог использовать ее в других веб-проектах?

Дополнительная информация:

Я использую webpack для создания своей платформы:

 module.exports = {
    mode: 'development',
    devtool: 'inline-source-map',
    module: {
      rules: [
        {
          test: /.ts$/,
          use: {
              loader: 'ts-loader',
              options: {
                  configFile: 'tsconfig.build.json',
              }
          },
          exclude: /node_modules/,
        },
      ],
    },
    resolve: {
      extensions: [ '.ts', '.js' ],
    },
  };
  

В процессе компиляции ошибок не возникает.

У кого-нибудь есть идея?

Комментарии:

1. Я считаю, что вам нужно включить встроенные файлы в ваш опубликованный модуль (т.Е. В папку dist). Смотрите это руководство medium.com/cameron-nokes /…

2. Мой файл index.ts экспортирует все файлы основного пакета, а webpack создает мне index.js файл, который содержит весь код пакета. Файлы определений также создаются и публикуются. На мой взгляд, я выполнил все пункты инструкций.

Ответ №1:

Я нашел решение.

@mbdavis был прав! (См. Комментарий)

Я создал свой базовый пакет с помощью webpack, который скомпилировал все файлы в es5 и объединил их в один файл (index.js ). Но для каждого исходного файла должен существовать отдельный js-файл в папке dist .

Поэтому я изменил процесс сборки и напрямую использовал компилятор Typescript.

Я внес все необходимые изменения в следующий коммит: https://github.com/tyframe/tyframe/commit/c0820361fa23ceab9428c1a5c7def7a4d0faf1bc

Папка Dist для изменений:

введите описание изображения здесь

Удалить папку после изменений:

dist_folder_after_changes