首页 > 解决方案 > 打字稿用只读属性初始化对象

问题描述

有没有办法初始化一个对象文字并同时用只读属性声明它的接口?

例如

let a = { readonly b: 2, readonly c: 3 }

标签: typescript

解决方案


您可以使用as const断言:

let a = { b: 2, c: 3 } as const // typed as { readonly b: 2; readonly c: 3; }
a.b = 2 //Cannot assign to 'b' because it is a read-only property.

如果您只希望某些道具是只读的,那实际上是不可能的,最好的办法是使用一个Object.assign包含只读属性的部分和另一个包含可变属性的部分:

let a = Object.assign({ b: 2, c: 3 } as const, {
  d: 0
});
a.b = 2 // err
a.d = 1 //ok

推荐阅读