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
类型的对象时出错,因为它包含方法定义