TypeScript では、型から readonly 修飾子を削除することは可能ですか?
例えば:
type Writeable<T> = { [P in keyof T]: T[P] };
使用法:
interface Foo {
readonly bar: boolean;
}
let baz: Writeable<Foo>;
baz.bar = true;
すべてのプロパティを書き込み可能にするために、型に修飾子を追加することは可能ですか?
ベストアンサー1
方法があります:
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
(遊び場でのコード)
アップデート
Typescript 2.8 以降では、新しい方法があります:
type Writeable<T> = { -readonly [P in keyof T]: T[P] };
型を再帰的に書き込み可能にする必要がある場合は、次のようにします。
type DeepWriteable<T> = { -readonly [P in keyof T]: DeepWriteable<T[P]> };
これらのtype
定義はマップされたタイプ