Closed AntonGrekov closed 1 week ago
Добавляю еще инфу о сброщике и tsconfig.json, по всей видимости в этом причина:
project.json
{
"name": "ejco",
"$schema": "../../node_modules/nx/schemas/project-schema.json",
"projectType": "application",
"sourceRoot": "apps/ejco/src",
"prefix": "ejco",
"tags": [],
"targets": {
"build": {
"executor": "@angular-devkit/build-angular:browser",
"options": {
"outputPath": "dist/apps/ejco",
"index": "apps/ejco/src/index.html",
"main": "apps/ejco/src/main.ts",
"polyfills": "apps/ejco/src/polyfills.ts",
"tsConfig": "apps/ejco/tsconfig.app.json",
"assets": [
"apps/ejco/src/favicon.ico",
"apps/ejco/src/assets",
{
"input": "libs/admin/src/lib/assets",
"glob": "**/*",
"output": "assets/admin"
},
{
"input": "libs/shared/src/lib/assets",
"glob": "**/*",
"output": "assets/shared"
},
{
"input": "libs/pages/src/lib/assets",
"glob": "**/*",
"output": "assets/pages"
}
],
"styles": [
"node_modules/@prizm-ui/theme/src/styles/styles.less",
"node_modules/@prizm-ui/components/src/styles/styles.less",
"apps/ejco/src/styles.scss",
"node_modules/material-design-icons/iconfont/material-icons.css"
],
"allowedCommonJsDependencies": ["lodash", "rxjs/internal/observable/dom/webSocket", "keycloak-js"]
},
"configurations": {
"production": {
"fileReplacements": [
{
"replace": "apps/ejco/src/environments/environment.ts",
"with": "apps/ejco/src/environments/environment.prod.ts"
}
],
"optimization": {
"styles":
{
"inlineCritical":
false
}
},
"outputHashing": "all",
"sourceMap": false,
"namedChunks": false,
"extractLicenses": true,
"vendorChunk": false,
"buildOptimizer": true
},
"development": {
"buildOptimizer": false,
"optimization": false,
"vendorChunk": true,
"extractLicenses": false,
"sourceMap": true,
"namedChunks": true
}
}
},
"serve": {
"executor": "@angular-devkit/build-angular:dev-server",
"options": {
"buildTarget": "ejco:build"
},
"configurations": {
"production": {
"buildTarget": "ejco:build:production"
},
"development": {
"buildTarget": "ejco:build:development"
}
},
"defaultConfiguration": "development"
},
"extract-i18n": {
"executor": "@angular-devkit/build-angular:extract-i18n",
"options": {
"buildTarget": "ejco:build"
}
},
"lint": {
"executor": "@nx/eslint:lint",
"outputs": ["{options.outputFile}"]
},
"test": {
"executor": "@angular-devkit/build-angular:karma",
"options": {
"main": "apps/ejco/src/test.ts",
"tsConfig": "apps/ejco/tsconfig.spec.json",
"karmaConfig": "apps/ejco/karma.conf.js",
"polyfills": "apps/ejco/src/polyfills.ts",
"styles": [],
"scripts": [],
"assets": []
}
}
}
}
tsconfig.json
{
"extends": "../../tsconfig.base.json",
"files": [],
"include": [],
"references": [
{
"path": "./tsconfig.app.json"
},
{
"path": "./tsconfig.spec.json"
},
{
"path": "./tsconfig.editor.json"
}
],
"compilerOptions": {
"target": "es2022",
"useDefineForClassFields": false,
},
"angularCompilerOptions": {
"strictInjectionParameters": true,
"strictTemplates": true
}
}
tsconfig.app.json
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "../../dist/out-tsc",
"types": [],
"target": "ES2022",
"useDefineForClassFields": false
},
"files": ["src/main.ts", "src/polyfills.ts"]
}
вот простенький сетап как воспроизвести. на чистом проекте настройки позволяют собрать билд, но тип теряется
<ng-container *prizmLet="5 as prizmLet">{{ prizmLet }}</ng-container>
<ng-container *ngIf="5 as ngIf"> {{ ngIf }} </ng-container>
тут переменная объявленная в *ngIf имеет тип
а в prizmLet потеряла
и до кучи наша собственная директива evjLet
Удалить наш Let, т.к. в Angular 18 есть нативная альтернатива
Библиотека
@prizm-ui/helpers
Компонент
PrizmLetDirective
Версия
NodeJS:
Dependencies:
Prizm 4.3.5
Проект в котором используется Prizm
IDP
Вопрос
В нашем проекте используется А17 и Typescript версии 5.4.5. При использовании директивы prizmLet не в булевом контексте тип не вычисляется. Ниже пример кода:
Template:
Model:
Error:
В другом проекте при TypeScript версии 5.2.2 и А16 всё работает как ожидается