假设有一个物体:
A = {
id: 123,
name: "sample",
foo: "test1",
bar: "test2"
}
还有一个界面:
interface I {
id: number;
name: string;
}
我需要编写一个函数,用接口 I 来“过滤”对象 A 并获得新对象等于:
{
id: 123,
name: "sample",
}
任何像 keyof 这样的打字稿功能都不起作用。有没有什么好的方法来解决这个问题,最好不使用类?
接口纯粹是 TypeScript 中的编译时构造。您不能使用它们来指导运行时行为。
也就是说,如果对象是一个常量,你可以派生出一个新的满足你要求的type:
const A = {
id: 123,
name: "sample",
foo: "test1",
bar: "test2"
} as const;
interface I {
id: number;
name: string;
}
type T = {
[K in keyof I]: (typeof A)[K]
}
// type T = {
// id: 123;
// name: "sample";
// }
但是无法满足您在运行时根据接口过滤对象的需求。