Угловой/машинописный текст: «экспорт const» не может быть скомпилирован

#angular #typescript

#угловой #машинописный текст

Вопрос:

Я только начал создавать свою собственную библиотеку для Angular. Сначала я добавил сервис; Я могу создать библиотеку без проблем.

Однако для этой службы я переместил константу в файл с именем tokens.ts, на который теперь ссылается служба. J

Теперь сборка завершается ошибкой со следующим сообщением:

 ------------------------------------------------------------------------------ Building entry point 'mylib' ------------------------------------------------------------------------------ √ Compiling with Angular sources in Ivy partial compilation mode. × Generating FESM2020 'SOME_VALUE' is not exported by distmylibesm2020libtokens.mjs, imported by distmylibesm2020libservicesmysuperservice.service.mjs Process finished with exit code 1   

Жетоны.ts:

 export declare const SOME_VALUE: ...  

Упомянутая услуга:

 import {SOME_VALUE} from "../tokens";  @Injectable({  providedIn: 'root', }) export class MySuperService{ //...  

Мой tsconfig.lib.json:

 {  "extends": "../../tsconfig.json",  "compilerOptions": {  "outDir": "../../out-tsc/lib",  "declaration": true,  "declarationMap": true,  "inlineSources": true,  "types": []  },  "exclude": [  "src/test.ts",  "**/*.spec.ts"  ] }   

Мой tsconfig.json:

 {  "compileOnSave": false,  "compilerOptions": {  "baseUrl": "./",  "paths": {  "common": [  "dist/mylib/mylib",  "dist/mylib"  ]  },  "outDir": "./dist/out-tsc",  "forceConsistentCasingInFileNames": true,  "strict": true,  "noImplicitOverride": true,  "noPropertyAccessFromIndexSignature": true,  "noImplicitReturns": true,  "noFallthroughCasesInSwitch": true,  "sourceMap": true,  "declaration": false,  "downlevelIteration": true,  "experimentalDecorators": true,  "moduleResolution": "node",  "importHelpers": true,  "target": "es2017",  "module": "es2020",  "lib": [  "es2020",  "dom"  ]  },  "angularCompilerOptions": {  "enableI18nLegacyMessageIdFormat": false,  "strictInjectionParameters": true,  "strictInputAccessModifiers": true,  "strictTemplates": true  } }   

My public-api.ts:

 export * from './lib/tokens'; export * from './lib/mylib/mysuperservice.service'; export * from './lib/mylib.module';  

Мой проект-дерево:

дерево проектов

Я мог бы предположить, что это как-то связано с моими опциями компилятора TS, так как в сообщении об ошибке упоминаются файлы .mjs. Однако я понятия не имею, где может быть проблема.

Вы можете мне с этим помочь?

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

1. можете ли вы отобразить структуру библиотеки и public-api.ts?

2. Конечно! Я скорректировал свой пост. По соображениям соответствия требованиям компании я переименовал некоторые должности, но последовательно и соответствующим образом.

3. Может быть, вы на самом деле объявляете тип вместо значения? export declare const SOME_VALUE: 'MyToken' должно быть export declare const SOME_VALUE = 'MyToken' ?

Ответ №1:

Как упоминал @jboot, проблема действительно заключалась в том, что я объявлял тип, а не конкретный экземпляр.

Правильный путь:

 export const SOME_VALUE= new InjectionTokenlt;SomeTypegt;('some description');  

Спасибо за это!