[TypeScript]型のmodifierを操作する
https://www.typescriptlang.org/docs/handbook/2/mapped-types.html#mapping-modifiers
type Foo {
readonly bar: string;
baz?: number;
}
modifierとは上記でいう、readonlyや?。
これらは+と-を使うことで、型に付与したり、削除したりできる。
(尤も、+に関しては特に指定が場合に自動付与されているため、明示的に使うのはもっぱら-の方かと思う。)
例えば強制的にmodifierを消す型は以下のようになる。
type Foo = {
readonly bar: string;
baz?: number;
}
type RemoveReadonly<T> = {
-readonly [P in keyof T]: T[P];
}
type WritableFoo = RemoveReadonly<Foo>;
type RemoveOptional<T> = {
[P in keyof T]-?: T[P];
}
type RequiredFoo = RemoveOptional<Foo>