context?: {
[name: string]: any;
};
export interface IMail {
to: string
subject: string,
template: string,
context: Record<string, unknown>;
}
function testFn<K extends TestKeys>(
obj: Partial<Type>, key: K
): Type[K]['value'] | undefined {
return key in obj ? obj[key]!.value : undefined
}
function getCampaigns () {
return knex('call as cc')
.where({
'cc.is_obsolete': false,
'cc.is_active': true,
})
.whereNotIn('cc.type_id', TYPES)
.select(
'cc.id',
'cc.value as config',
'cc.type_id as sale_type_id'
).catch(() => {/* здесь тот же код, который в кетч из первого */});
}
let key: 'a' | 'b';
let obj: {
a: T1;
b: T2;
};
let v1 = obj[key]; // T1 | T2
obj[key] = v2; // можно присвоить только T1 & T2
mailerService.sendMail готов принять Record< string, unknown >, тебя такой тип тоже устроит, потому незачем что-то придумывать.