"TypeError: Assinging value to read-only" ,但仅在 AOT 上发生



我有一个相对较旧的项目,最初是在Angular 7中制作的,我最近受到了激励,将其更新为13,我能够使一切正常工作。。。至少在开发过程中。(实际上,大约半年前我已经将其升级到Angular 10,但我只是在上面进行开发,当时从未真正尝试过编译(

因此,有了ng serve,项目运行良好,一切都很好,所以我现在需要编译它,将其与API一起推送到我的服务器,在这里和那里进行了一些修复后,它进行了编译,我可以看到屏幕和一切!然而,我得到了这个控制台错误:

ERROR TypeError: "count_categories" is read-only
Dictionary dictionary.ts:8
set dictionaries.service.ts:34
getAll dictionaries.service.ts:84
(..)

好吧,它也显示了线和一切,但。。。我不知道该怎么修?我还发现,这个问题似乎归因于"严格模式";,我试着用很多方法禁用它,但都没用(因此,我在这里(。

以下是正在发生的事情,提醒一下,此代码在发球时运行良好,但在AOT:上崩溃

export class Dictionary {
public constructor(init?: any) {
Object.assign(this, init); // The error is here
}
id: number;
name: string;
language: string;
dateCreated: Date;
dateRevision: Date;
@Optional() changes: boolean;
@Optional() novel: Novel[];
// tslint:disable-next-line: variable-name
@Optional() count_categories: [{count: number}];
countCategories(): number {
if (this.count_categories[0]) {
return this.count_categories[0].count;
}
return 0;
}
}

https://github.com/ssj4maiko/mtltools/blob/master/resources/frontend/src/app/_models/dictionary.ts

init的值来自一个API:

{
"id": 1,
"name": "asd",
"language": "English",
"dateCreated": "2019-05-28T01:29:13.000000Z",
"dateRevision": "2022-01-14T17:56:34.000000Z",
"count_categories": [
{
"idDictionary": 1,
"count": 14
}
]
}

因此,很明显,错误来自于Object.assign将值分配给可选的"0";count_categories"对象数组,并且它在服务期间工作,但在AOT上,我得到";只读";这个API被调用的每个屏幕中都有错误。。。它不应该是只读的,因为我会动态修改这个值。

所以,我尝试禁用严格模式,但没有成功(也许我做错了(,而且变量不应该处于只读模式。

所以我要求一个解决方案,这是一种真正禁用这种检查的方法吗?或者以不同的方式分配值以避免问题?或者是我想不出来的事?

Angular不是我的专长,我上次看到它已经很久了,但我做的是终身编程,我的意思是,我不知道这里有所有可用的技巧,但我应该能够理解需要什么。

好吧,在继续的同时,尽管我知道当我使用serve时它完全可以工作,当我尝试编译时,当我再次尝试为它提供服务时,问题被复制了,也就是说,它也停止了工作。

起初,我认为这可能与必须将值分配给对象有关,所以我更改了API,直接为我提供了所需的唯一数字(计数(,但这仍然很糟糕。我删除@Optional的那一刻起了作用。。。

我去检查了一下,出于我的需要,我只是确认了所有对此的调用都应该返回值,这意味着,最初的可选值总是存在的,尽管这不应该是正确的,但它在实践中有效。我仍然想学习一种更好的方式来更好地理解这些,以及一种处理这种"问题"的方法;"限制";。

好吧,关于我认为它会增加和减少的部分,我似乎忘记了在这次升级中添加它,所以它现在也不会影响我,但我已经有了一些想法,至少可以让事情变得更有活力。

最新更新