声明一个克隆函数以使只读属性在 TypeScript 中可写?

2024-01-18

我只读了打字稿中的数据和clone功能:

class Data {
    readonly foo: string;
}

const ro: Data = {
    foo: 'bar'
}
// how to declare clone so that it returns writable data?
declare function clone<T>(val: T): T;

const rw = clone(ro);
// how to make the properties of rw writable?
rw.foo = 'changed';

如何申报clone函数使其返回的对象的属性可写?


有一种更新的方法可以实现此目的,但我不认为更新此处已有的答案是记录此问题的最佳方法。

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

这样做的额外好处是保留可选修饰符并且只需要一个通用参数。

(操场上的代码 http://www.typescriptlang.org/play/index.html#src=type%20Mutable%3CT%3E%20%3D%20%7B%0D%0A%20%20%20%20-readonly%20%5BP%20in%20keyof%20T%5D%3A%20T%5BP%5D%3B%0D%0A%7D%3B%0D%0A%0D%0Aclass%20Data%20%7B%0D%0A%20%20%20%20readonly%20foo%3A%20string%3B%0D%0A%7D%0D%0A%0D%0Aconst%20ro%3A%20Data%20%3D%20%7B%0D%0A%20%20%20%20foo%3A%20'bar'%0D%0A%7D%0D%0Adeclare%20function%20clone%3CT%3E(val%3A%20T)%3A%20Mutable%3CT%3E%3B%0D%0A%0D%0Aconst%20rw%20%3D%20clone(ro)%3B%0D%0Arw.foo%20%3D%20'changed'%3B)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

声明一个克隆函数以使只读属性在 TypeScript 中可写? 的相关文章

随机推荐