Typescript 如何从不可变对象类型中提取可变对象类型

Typescript 如何从不可变对象类型中提取可变对象类型,typescript,seamless-immutable,Typescript,Seamless Immutable,我需要创建一个类型,从现有的不可变对象类型中提取可变对象类型,如: import * as Immutable from 'seamless-immutable' interface IObjType { field: string; } type TObjImmType = Immutable.Immutable<IObjType>; const obj: IObjType = { field: 'val' }; const objImm: TObjImmType = Im

我需要创建一个类型,从现有的不可变对象类型中提取可变对象类型,如:

import * as Immutable from 'seamless-immutable'

interface IObjType {
  field: string;
}
type TObjImmType = Immutable.Immutable<IObjType>;

const obj: IObjType = { field: 'val' };
const objImm: TObjImmType = Immutable(obj);

// dummy function to show what I need to do
const getMutable = (immObj: TObjImmType): IObjType => immObj.asMutable();

const result = getMutable(objImm);
import*作为“无缝不可变”的不可变项
接口IObjType{
字段:字符串;
}
类型TObjImmType=Immutable.Immutable;
常量obj:IObjType={field:'val'};
const objImm:TObjImmType=不可变(obj);
//虚拟函数来显示我需要做什么
常量getMutable=(immObj:TObjImmType):IObjType=>immObj.asMutable();
const result=getMutable(objImm);
所以问题在于
getMutable
。Typescript不检查它是否重新返回了可变或不可变对象,我需要强制TS验证这一点,并在返回不可变时抛出错误

如何做到这一点?

只读属性只是TS编译器的标志,它在JavaScript中不存在

这本质上意味着只读和非只读属性在功能上是100%相等的,因此不应该有任何可能的方法来验证使对象可变/不可变的过程。

只读属性只是TS编译器的标志,它在JavaScript中不存在


这本质上意味着只读和非只读属性在功能上是100%相等的,因此不应该有任何可能的方法来验证使对象可变/不可变的过程。

正确,但是,不可变有其他方法。从函数的角度来看,返回不可变/可变对象很重要。所以在理论上,我应该能够像这样:
ts接口A{prop1:string method1:()=>string}接口B{prop1:string}
,并要求返回
B
类型,并且在返回
A
类型的对象时出错,因为它包含正确的方法定义,但是,不可变的方法有其他方法。从函数的角度来看,返回不可变/可变对象很重要。所以在理论上,我应该能够像这样:
ts接口A{prop1:string method1:()=>string}接口B{prop1:string}
,并要求返回
B
类型,并且在返回
A
类型的对象时出错,因为它包含方法定义