TypeScript-只读的可变性和反转

问题描述 投票:1回答:1

假设我具有以下可变的类:

class Foo {
    constructor(public bar: any) { }
}

我可以这样定义此类的readonly实例:

const foo: Readonly<Foo> = new Foo(123);
foo.bar = 456; // error, can't reassign to bar because it's readonly.

我想做的是与此相反的,在这个类是不可变的:

class Foo {
    constructor(public readonly bar: any) { }
}

然后可以像这样制作可变的版本:

const foo: Mutable<Foo> = new Foo(123);
foo.bar = 456;

这可能吗?

typescript immutability
1个回答
2
投票

是,您可以在类型定义中使用-readonly

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

const foo: Mutable<Foo> = new Foo(123);
foo.bar = 456;

Playground

但是请记住,这只是类型定义,它不会改变原始逻辑。

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

class Foo {
    get test(): boolean {
      return true;
    }

    constructor(public readonly bar: any) { }
}

const foo: Mutable<Foo> = new Foo(123);
foo.bar = 456;
foo.test = false; // oops, it will cause an error.
© www.soinside.com 2019 - 2024. All rights reserved.