Расширение модуля Typescript и веб-пакет - PullRequest
0 голосов
/ 15 октября 2019

Typescript не будет компилироваться, если расширение модуля через объявление пространств имен окружения не будет импортировано. Отлично!

Мне трудно заставить веб-пакет сделать то же самое.

Пространство имен / модуль:

// MyNamespace.ts

export class MyClass
{
  constructor() 
  {
    console.log('MyClass');
  }
}

Файл, дополняющий его:

// MyClassPatch.ts

import * as MyNamespace from './MyNamespace';

declare module './MyNamespace'
{
  interface MyClass
  {
    Patch(): void;
  }
}

MyNamespace.MyClass.prototype.Patch = function()
{
  console.log('Patched');
};

Другой файл:

// index.ts

import * as MyNamespace from './MyNamespace';
//import './MyClassPatch'; notice that line!

const myClass = new MyNamespace.MyClass();
myClass.Patch();

И он прекрасно компилируется! Конечно, выдает ошибку времени выполнения, потому что MyClassPatch не импортируется.

Я создал простое хранилище (https://github.com/chadiik/ts-ambient-declarations), пробуя разные загрузчики Typescript (потому что я думал, что проблема в этом). Npmследующие сценарии:

  • "no-bundle": скомпилируется с Typescript (tsc) и завершится ошибкой. (Ожидается)
  • "bundle-atl": скомпоновается с веб-пакетом, используяawesome-typescript-loader и success (не ожидается!)
  • "bundle-bl": объединить с веб-пакетом с помощью babel-loader и успешно (не ожидается!)
  • "bundle-tl": будет в комплекте с веб-пакетом, используя ts-loader, и преуспеет (не ожидается!)

Какие изменения конфигурации мне нужно внести в веб-пакет? Или это ошибка?

PS:Мне удалось обойти это, добавив * .patch.ts к моим patch именам файлов и добавив исключение в tsconfig: "** / *. Patch.ts", но это добавляет другие проблемыс intellisense в vscode (ветка 'patch-exclude' в репо)?

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...