> 文章列表 > TS 使用自动提示生成对象中的键

TS 使用自动提示生成对象中的键

TS 使用自动提示生成对象中的键

TS 使用自动提示生成对象中的键

使用 plain object 而不是 class 的原因主要是在于 redux 中保存的对象需要为可序列化的对象。当然,具体操实现的时候肯定是可以无视这个需求的,不过 Redux 团队强烈建议使用可序列化对象,具体的官方文档说明在:Can I put functions, promises, or other non-serializable items in my store state? 中有。

简单说就是,技术上可行,但是实践上可能会 break 项目,在 persist 和 rehydrate 过程中出现问题。

对象版本的 TypeScript 构造函数中解构参数属性,这里想要解决的问题是:在已经定义好 interface 的情况下怎么样可以做到不用重复 cv 每一个 key 去创建对象。

最后在一个 Stack Overflow 的 post 网址现在找不到了,等下次有空搜索一下,找到了再贴 ref 上找到结果,大致实现方法如下:

interface Test {str: string;num: number;x: boolean;y: number;z: string;
}export const testEnum: {[K in keyof Required<Test>]: K;
} = {str: 'str',num: 'num',x: 'x',y: 'y',z: 'z',
};

这里主要实现的方式是通过 [K in keyof Required<Test>]: K; 这一段,因此在 ide 中如果不手动 cv,那么 ide 其实会报错:

TS 使用自动提示生成对象中的键

然后就可以利用 IDE 提供的 Quick Fix 添加所有的 key。

最后在处理结果的时候,大致上可以这么操作:

const obj = {str: 'test',num: 10,x: false,y: 10,z: 'tesr2',test: 'test',
};const arr: Test[] = [];const res = {};for (const key of Object.keys(testEnum)) {res[key] = obj[key];
}console.log(res);arr.push(res as Test);

TS 使用自动提示生成对象中的键