问题描述
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 (将#修改为@)