[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>