【发布时间】:2019-06-11 18:16:11
【问题描述】:
有没有办法初始化一个对象字面量并同时声明它的接口与只读属性?
例如
let a = { readonly b: 2, readonly c: 3 }
【问题讨论】:
标签: typescript
有没有办法初始化一个对象字面量并同时声明它的接口与只读属性?
例如
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
【讨论】:
你可以用自定义类型来写
type Point = {
readonly x: number;
readonly y: number;
};
const a: Point = {
x: 1,
y: 2,
};
a.x = 2; // ERROR Cannot assign to 'x' because it is a constant or a read-only property.
【讨论】: