我试着用typescript编写一段代码,可以归结为以下模式:
function test(x: {theFlag: boolean} & {readonly theFlag: boolean} ){
x.theFlag = true;
}
但我在这行得到了以下错误
x.theFlag = true;
[ts]不能赋给'theflag',因为它是常量或只读属性。
我不知道为什么typescript在这个问题上给了我一个错误。我认为从逻辑上讲这应该是允许的。
有没有一个很好的解决办法来实现我的目标?
我使用的是Typescript版本2.7.2。
最佳答案
我认为编译器是安全的,因为属性在一个组成类型中是只读的,所以它在交集中是只读的。
在2.8中,您可以很容易地创建一个从任何属性中删除readonly
的类型:
type Mutable<T> = { -readonly [P in keyof T]: T[P]};
function test(x: Mutable<{theFlag: boolean} & {readonly theFlag: boolean}> ){
x.theFlag = true;
}
在2.7及以下版本中,我认为
Mutable
的以下定义应该起作用,我不使用任何2.8语法,但我没有旧版本可供测试:type MutableHelper<T, TNames extends string> = { [P in TNames]: (T & { [name: string]: never })[P]};
type Mutable<T> = MutableHelper<T, keyof T>;
关于typescript - TypeScript交集类型和只读属性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49638155/