Добавление декоратора класса прерывает импорт интерфейса для параметров конструктора.
Я пытался запустить 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.
Что может быть причиной этого?
РЕДАКТИРОВАТЬ:
На данный момент нашел решение - Вроде все получается, если интерфейс и класс в отдельных файлах. Я действительно задаюсь вопросом, является ли это жестким ограничением.