我试图找到一个简洁的函数,它只选择类型中感兴趣的属性(不仅在类型中,而且在运行时掩盖其他属性)。
目前我最好的解决方案是:
export function picker<T extends {}, K extends keyof T>(
keys: K[],
): (m: T) => Pick<T, K> {
return (m: T) => {
const result: Partial<Pick<T, K>> = {};
for (const key of keys) {
result[key] = m[key];
}
return result as Pick<T, K>;
};
}
interface Test {
name: string;
age: number;
hobbies: string[];
}
const t: Test = {
name: "yj",
age: 12,
hobbies: ["shopping"],
};
const pickTest = picker<Test, "name">(["name"]); //I want to remove the repetition in writing name twice here
// pickTest(t) should be of type `{name: string}` only