类型 Pick 上不存在 Typescript 属性

问题描述

我有两个类,一个扩展另一个

export class AttributeDescriptorContract<T> extends AttributeContract {
// some properties
}
export class InputAttributeDescriptorContract<T> extends AttributeDescriptorContract<T> {
   public tsDummyIsInput: boolean;
}

现在,我有一个类 MovieAttributeConfig,它可以是前两个类之一的对象。标题是输入,但导演不是。

export class MovieAttributeConfig extends AggregateAttributeConfig {
  public title: InputAttributeDescriptorContract<string>;

  public director: AttributeDescriptorContract<string>;
}

我正在尝试构建一个 ExtractInputConfigKeys <AttributeConfig extends BaseAttributeConfig> 映射类型,它只会从属性配置中选择输入。

type ExtractInputConfigKeys <AttributeConfig extends BaseAttributeConfig> = {
  [inputKey in keyof AttributeConfig]: AttributeConfig[inputKey] extends { tsDummyIsInput: boolean } ? inputKey : never
}[keyof AttributeConfig];
type movieInputKeys = ExtractInputConfigKeys<MovieAttributeConfig>;
type ExtractInputConfig = Pick<MovieAttributeConfig,movieInputKeys>;

这暂时不是通用的,只是为了减少出错的机会。我很确定这会奏效,尤其是因为在 webstorm 中对类型进行搜索显示了以下结果:

movieInputKeys - “标题

ExtractInputConfig - {title: InputAttributeDescriptorContract}

这是我所期望的。但是,在编写此函数

function dummyFunc (a: ExtractInputConfig) {
  console.log(a.title);
}

编译失败并出现错误属性 'title' 在类型 'Pick' 上不存在。

我做错了什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...