Angular &引用;x";是只读的,但不是';T
我有一个Angular 10(Typescript 3.9)项目,课程如下:Angular &引用;x";是只读的,但不是';T,angular,typescript,ngrx,Angular,Typescript,Ngrx,我有一个Angular 10(Typescript 3.9)项目,课程如下: export class Document { constructor( public id: number, ... public tags: Tag[] ) { this.id = id; ... this.tags = tags; } } 如果我尝试使用更改标记(重新分配或推送) docume
export class Document {
constructor(
public id: number,
...
public tags: Tag[]
) {
this.id = id;
...
this.tags = tags;
}
}
如果我尝试使用更改标记(重新分配或推送)
document.tags=
例如,在现有对象中,我得到:
错误类型错误:“标记”是只读的
如果我有一个
只读
我期待这种行为。你知道这个错误是从哪里来的吗
我最近将Angular 7升级到了10,之前一切都很好,但是升级说明中没有提到这种行为
停用严格模式(即使被认为是不好的做法)不起作用
你知道吗?首先,文件是保留的,尽量不要使用它。并检查下面的示例
class Tst {
constructor(
public id: number,
public tags: number[]
) {
this.id = id;
this.tags = tags;
}
}
var x = new Tst(1, [1,2])
x.id = 12
x.tags = [3,4]
以下是根据评论给出的答案 更改ngrx存储对象可能会导致此类行为,因为存储从减速器外部保护要更改的对象 大多数人还额外安装了ngrx store freeze(ngrx商店冻结)来取回保险箱。使用Angular 8,该功能成为内置功能 您可以尝试通过将
strictStateImmutability
设置为false
来禁用它,但不建议这样做,因为存储现在可能包含不可预测的更改
@NgModule({
imports: [
StoreModule.forRoot(reducers, {
runtimeChecks: {
strictStateImmutability: false,
},
}),
],
})
export class AppModule {}
请显示您在该代码中使用的
文档的创建位置和创建方式。(请注意,有一个名为document
的全局文件。您可能误用了它吗?)。请用一个显示问题的链接更新您的问题,最好是一个操场链接(作为附件),在那里我们可以看到它运行。(旁注:我可能会选择一个不同的名称,因为文档
是一个预定义的名称。但对其进行阴影处理确实有效。)完整示例?如何导入和实例化类等。您是否在项目中使用存储?尝试更改存储的对象可能会导致这种效果,因为存储会创建只读字段,以确保状态不会从减速器外部更改。是的,大多数人会额外安装ngrx store freeze
,以检索安全设置。对于Angular 8,此功能是内置的。您可以(但不应该)对文档进行阴影处理,因此名称不是问题。另一个选项是在对从存储检索到的所有对象进行变异之前展开/复制它们。