这更像是一个关于如何处理在TypeScript. 我知道并且非常同意这个概念,即功能应该尽可能少的副作用,如果有的话。
但有时,希望就地更改对象(及其类型),而不是使用另一种静态类型创建它的新副本。我最常遇到的原因是可读性、效率或减少行数。
由于我原来的例子过于复杂和过于复杂,这里有一个(希望如此)非常基本的例子:
type KeyList = 'list' | 'of' | 'some' | 'keys';
// Original type (e.g. loaded from a JSON file)
interface Mappable {
source: { [K in KeyList]: SomeNestedObject },
sourceOrder: KeyList[];
}
// Mapped Type (mapped for easier access)
interface Mapped {
source: { [K in KeyList]: SomeNestedObject },
sourceOrder: SomeDeepObject[];
}
// What I have to do to keep suggestions and strict types all the way
const json: Mappable = JSON.parse(data); // ignoring validation for now
const mapped: Mapped = toMappedData(json);
// What I would like to to
const mapped: Mappable = JSON.parse(data);
mapData(mapped); // mapped is now of type Mapped
原因,为什么我想同时改变对象属性和它的类型可能是:
该json
对象非常大,在内存中拥有它的 2 个副本会适得其反
json
将对象深拷贝到对象mapped
中非常麻烦
我不相信“我想做什么”下的代码可读性很强,不管它是否工作。我正在寻找一种干净且类型安全的方法来解决此问题。或者,或者,建议或想法来扩展打字稿的功能以解决此问题。
非常感谢对此的任何建议、想法和评论!也许我对此太深入了,看不到真正简单的解决方案。
墨色风雨
梵蒂冈之花
相关分类