指定对象文字的属性为只读

时间:2019-11-08 09:13:22

标签: typescript

我正在寻找一种将对象文字的属性标记为只读的方法。这样以下代码将产生编译错误:

const o = {
    p: true
};

o.p = false; // <== i want an error here

我显然可以这样做:

const o: {readonly p: boolean} = {
    p: true
};

o.p = false;

但这真的很笨拙。

还有更优雅的方式吗?

1 个答案:

答案 0 :(得分:1)

如果要将所有属性设为只读as const,则是一个不错的选择:

const o = {
    p: true
} as const;

o.p = false; 

Playground Link

如果只希望某些属性为只读,则没有一个好的选择... Object.assign可以使用,但是很笨拙:

const o = Object.assign({
    nonRo: true
}, {
    p: true
} as const);

o.p = false; 
o.nonRo = false //ok

Playground Link