Typescript 指定对象文字';的属性是只读的
我正在寻找一种将对象文字的属性标记为只读的方法。因此,以下代码将产生编译错误:Typescript 指定对象文字';的属性是只读的,typescript,Typescript,我正在寻找一种将对象文字的属性标记为只读的方法。因此,以下代码将产生编译错误: const o = { p: true }; o.p = false; // <== i want an error here 但这真的很笨拙 还有更优雅的方法吗?如果您想将所有属性设置为只读,const是一个不错的选择: const o = { p: true } as const; o.p = false; 如果您只希望某些属性是只读的,那么没有一个好的选择对象。分配工作正常,但
const o = {
p: true
};
o.p = false; // <== i want an error here
但这真的很笨拙
还有更优雅的方法吗?如果您想将所有属性设置为只读
,const
是一个不错的选择:
const o = {
p: true
} as const;
o.p = false;
如果您只希望某些属性是只读的,那么没有一个好的选择<代码>对象。分配工作正常,但相当笨重:
const o = Object.assign({
nonRo: true
}, {
p: true
} as const);
o.p = false;
o.nonRo = false //ok
实际上,“as const”是一件非常好的事情。不知怎么的,我错过了。谢谢但在这种情况下,它似乎不能正常工作:``const o={p:true}as const;函数foo(a:{p:boolean}):void{a.p=false;}foo(o);//@这是一个完全不同的问题。。Ts对readonly修饰符非常宽松,允许分配给非只读但兼容的类型是的,这太差劲了。乍一看,这实际上像是一只虫子。但你是故意的吗?你有关于这方面的文档或讨论的链接吗?@DmytroGokun这是一个关于以下主题的讨论:
const o = Object.assign({
nonRo: true
}, {
p: true
} as const);
o.p = false;
o.nonRo = false //ok