TypeScript - readonly 修飾子の削除 質問する

TypeScript - readonly 修飾子の削除 質問する

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定義はマップされたタイプ

おすすめ記事