在打字稿中将对象和接口相交

问题描述 投票:0回答:1

假设有一个物体:

A = {
    id: 123,
    name: "sample",
    foo: "test1",
    bar: "test2"
}

还有一个界面:

interface I {
     id: number;
     name: string;
}

我需要编写一个函数,用接口 I 来“过滤”对象 A 并获得新对象等于:

{
    id: 123,
    name: "sample",
}

任何像 keyof 这样的打字稿功能都不起作用。有没有什么好的方法来解决这个问题,最好不使用类?

typescript typescript-typings typescript-generics
1个回答
0
投票

接口纯粹是 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";
// }

但是无法满足您在运行时根据接口过滤对象的需求。

© www.soinside.com 2019 - 2024. All rights reserved.