在Typescript中,是否可以从类型中删除readonly修饰符?
例如:
type Writeable<T> = { [P in keyof T]: T[P] };
用法:
interface Foo {
readonly bar: boolean;
}
let baz: Writeable<Foo>;
baz.bar = true;
是否可以在类型中添加修饰符以使所有属性都可写?
答案 0 :(得分:19)
有办法:
type Writeable<T extends { [x: string]: any }, K extends string> = {
[P in K]: T[P];
}
但是你可以采取相反的方式,这将使事情变得更容易:
interface Foo {
bar: boolean;
}
type ReadonlyFoo = Readonly<Foo>;
let baz: Foo;
baz.bar = true; // fine
(baz as ReadonlyFoo).bar = true; // error
由于打字稿2.8,有一种新方法:
type Writeable<T> = { -readonly [P in keyof T]-?: T[P] };
有关此内容的更多信息:Improved control over mapped type modifiers