Typescript - 如何将对象转换为接口

Mik*_*ike 6 typescript

假设有一个接口

interface A {
  a: number;
}
Run Code Online (Sandbox Code Playgroud)

目前我有一个原始对象

const a = { a: 1, b: '2' };
Run Code Online (Sandbox Code Playgroud)

我希望有一种方法可以x成为{ a: 1 },它只包含在接口中定义的成员。

这可以通过创建一个空的{}循环并填充 allA的成员来实现,但考虑到接口成员和对象的冗余字段可能多达几十个,这样做是不切实际的。

我试过

let x = <A> a; // or let x = a as A;
console.log((x as any).b); // still exist
Run Code Online (Sandbox Code Playgroud)

我也查了一下,lodash发现keysand pick,但这些是针对类实例而不是接口。

Ami*_*mid 2

基本上,您的问题归结为将接口的所有属性作为字符串数组获取,然后复制仅包含这些属性的对象的问题。制作对象的副本非常简单,并且有大量的示例。但第一个问题更难解决。

据我所知,“现在”完成此任务的唯一方法是在编译期间使用打字稿的自定义转换器。这是一个示例,但请注意 - 这需要使用尚未稳定发布的 typescript 2.4+。