打字稿 - 删除只读修饰符

时间:2017-03-24 12:50:20

标签: typescript

在Typescript中,是否可以从类型中删除readonly修饰符?

例如:

type Writeable<T> = { [P in keyof T]: T[P] };

用法:

interface Foo {
    readonly bar: boolean;
}

let baz: Writeable<Foo>;

baz.bar = true;

是否可以在类型中添加修饰符以使所有属性都可写?

1 个答案:

答案 0 :(得分:19)

有办法:

type Writeable<T extends { [x: string]: any }, K extends string> = {
    [P in K]: T[P];
}

code in playground

但是你可以采取相反的方式,这将使事情变得更容易:

interface Foo {
    bar: boolean;
}

type ReadonlyFoo = Readonly<Foo>;

let baz: Foo;
baz.bar = true; // fine

(baz as ReadonlyFoo).bar = true; // error

code in playground

更新

由于打字稿2.8,有一种新方法:

type Writeable<T> = { -readonly [P in keyof T]-?: T[P] };

有关此内容的更多信息:Improved control over mapped type modifiers