我有一个接口,它定义了一个可用于将命令行参数传递给应用程序的对象:
type argumentPrimitive = string | number | Date | boolean;
export type IApplicationArguments = {
[key: string]: argumentPrimitive | argumentPrimitive[];
}
我还有一个接口,可以选择用包含该参数的配置信息的对象替换值:
export type IApplicationArgumentsConfiguration<T extends IApplicationArguments> = {
readonly [P in keyof T]?: T[P] | CommandOption<T[P]>;
}
在我的函数中处理这个我想迭代值:
function parseCommands<T extends IApplicationArguments>(optionDefinition: IApplicationArgumentsConfiguration<T>): T {
for (let propertyName in optionDefinition) {
const propertyValue: argumentPrimitive | CommandOption<argumentPrimitive> = optionDefinition[propertyName];
}
}
这不编译:
类型'IApplicationArgumentsConfiguration [keyof T]'不能赋值为'string |号码|布尔值|日期| CommandOption”。
Playground链接有完整错误:
有没有办法将映射类型传递给迭代代码?
答案 0 :(得分:0)
问题在于我忘记了阵列的可能性。
将代码更正为:
export interface CommandOption<T> {
sampleValue: T;
}
type argumentPrimitive = string | number | Date | boolean;
type argumentTypes = argumentPrimitive | argumentPrimitive[];
export type IApplicationArguments = {
[key: string]: argumentTypes;
}
export type IApplicationArgumentsConfiguration<T extends IApplicationArguments> = {
readonly [P in keyof T]: T[P] | CommandOption<T[P]>;
}
function parseCommands<T extends IApplicationArguments>(optionDefinition: IApplicationArgumentsConfiguration<T>) {
for (let propertyName in optionDefinition) {
const propertyValue: argumentTypes | CommandOption<argumentTypes> = optionDefinition[propertyName];
}
}
使其正确编译。