Можно, если им явно не указать тип Args, но тогда вы теряете предварительную проверку, увы:
let a1 = {
channelID: {
RegExp: ["\\d+", true],
description: "d1"
},
content: {
RegExp: [".+", true],
description: "d2"
}
};
type T1 = {[K in keyof typeof a1]: string}
Чтобы сохранить проверку - придётся воспользоваться дополнительной бессмысленной функцией для уточнения типа:
type Args = {
[key: string]: {
RegExp: [string, boolean],
description: string
}
}
function createArgs<T extends Args>(args: T): T {
return args;
}
type TStringKeys<T extends Args> = {[K in keyof T]: string};
let a1 = createArgs({
channelID: {
RegExp: ["\\d+", true],
description: "d1"
},
content: {
RegExp: [".+", true],
description: "d2"
}
});
type T1 = TStringKeys<typeof a1>
К сожалению на текущий момент(ts4.2.3) избавиться от функции-обёртки не получится.