Добавление декоратора класса прерывает импорт интерфейса для параметров конструктора.

Я пытался запустить https://github.com/inversify/InversifyJS на CRA, я пошел дальше и настроил его, но теперь столкнулся со следующей проблемой:

      import {
    AudioVideoFacade,
    BackgroundBlurProcessor,
    BackgroundBlurVideoFrameProcessor,
    DefaultVideoTransformDevice,
    Logger,
} from "amazon-chime-sdk-js";

export interface IInterface {

}

@injectable()
export class Class implements IInterface {
    ...
    private readonly _logger: Logger;

    constructor(logger: Logger) {
        this._logger = logger;
    }
}

Как только я добавлю @injectable()декоратор, билд сразу ломается с export 'Logger' (imported as 'Logger') was not found in 'amazon-chime-sdk-js'. Как только я удаляю декоратор, он снова работает нормально

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

Это tsconfig, который я использую:

      {
    "compilerOptions": {
        "baseUrl": "src",
        "target": "es5",
        "lib": ["dom", "dom.iterable", "esnext"],
        "allowJs": true,
        "skipLibCheck": true,
        "esModuleInterop": true,
        "allowSyntheticDefaultImports": true,
        "strict": true,
        "forceConsistentCasingInFileNames": true,
        "noFallthroughCasesInSwitch": true,
        "module": "esnext",
        "noImplicitAny": true,
        "moduleResolution": "node",
        "resolveJsonModule": true,
        "isolatedModules": true,
        "noEmit": true,
        "sourceMap": true,
        "experimentalDecorators": true,
        "emitDecoratorMetadata": true,
        "jsx": "react-jsx",
        "types": ["node", "reflect-metadata"]
    },
    "include": ["src"],
    "exclude": ["node_modules"]
}

Установка Craco Babel:

      babel: {
    presets: [],
    plugins: [
        "babel-plugin-transform-typescript-metadata",
        ["@babel/plugin-proposal-decorators", { legacy: true }],
        ["@babel/plugin-proposal-class-properties", { loose: true }],
    ],
    loaderOptions: (babelLoaderOptions, { env, paths }) => {
        return babelLoaderOptions;
    },
},

Typescript только что обновился до 4.6.3.

Что может быть причиной этого?

РЕДАКТИРОВАТЬ:

На данный момент нашел решение - Вроде все получается, если интерфейс и класс в отдельных файлах. Я действительно задаюсь вопросом, является ли это жестким ограничением.

0 ответов

Другие вопросы по тегам