如何用TypeScript泛型函数自动获取类型键并校验对象完整性?
TypeScript泛型函数自动获取类型键的实现方案
我刚接触TypeScript,想要编写一个泛型函数来获取给定类型的键,期望效果如下:
const getKeys = <T>(): string[] => { ??? } interface A { a: string, b: number } getKeys<A>(); // 返回 ["a", "b"]
需求背景
实际业务中,我希望编写一个函数,接收原始对象和类型,校验该对象是否包含该类型的所有键,不想为每个类型手动传入键!期望的checkKeys函数如下:
const checkKeys = <T>(rawData: any): boolean => { ??? } interface A { a: string, b: number } const wrong = { x: "aaa", y: "bbb", }; checkKeys<A>(wrong); // 返回 false
现有实现的痛点
我目前能写出如下代码,但每次调用都要手动传入对应类型的键,非常麻烦:
const checkKeys = <T, K = keyof T>(data: any, ...keys: K[]) => { for (const key of keys) { if (!data[key]) { return false; } } return true; } interface A { a: string, b: number, } const right = { a: "a", b: "b" }; const wrong = { c: "a", b: "b" }; checkKeys<A>(right, "a", "b"); // 返回 true checkKeys<A>(wrong, "a", "b"); // 返回 false
我知道TypeScript只是类型系统,运行时需要实际值,但既然编译时TypeScript已经知道这些键,甚至能校验传入的keys参数是否合法,能否让它在编译时为我生成keys数组?有没有我不知道的实现方式?
内容的提问来源于stack exchange,提问作者frangulyan
相关产品推荐
相关产品推荐

