打字稿:属性类型通配符

时间:2020-02-05 13:06:55

标签: typescript types typescript-typings

我有一个来自另一个软件包的给定接口,所以我不能真正更改它。为了简单起见,我们只说以下界面:

interface SomeInterface {
   someProp: string;
   someOtherProp?: number;
}

我想知道能否以某种方式提取所有属性的类型,以便获得一种可以是原始Interface的任何属性的组合类型。

在示例中,它将解析为string | number | undefined类型。

另外,问题并不完全相同,但与此相关。是否有可能提取允许的属性名称而不是值,所以在给出的示例中,它将是一个持有值"someProp" | "someOtherProp"的类型。

对于第一种情况,我已经尝试过SomeInterface[string]类型,但是我认为仅当接口定义了键/索引签名而不是特定属性时,该方法才有效。

1 个答案:

答案 0 :(得分:2)

通过keyof获取Mapped type的所有可能的键

type Keys = keyof SomeInterface;

通过indexed access operator获取所有可能的Mapped类型值

type Values = SomeInterface[keyof SomeInterface];