Я пишу Azure Функции в TypeScript. Я хочу улучшить один из классов функций TypeScript, Context
. Azure Функции объявляют триггеры, ввод и вывод в конфигурационном файле json.
Вот пример привязки:
{
"name": "shipmentDocumentOut",
"type": "cosmosDB",
"databaseName": "dev",
"collectionName": "shipment",
"createIfNotExists": false,
"connectionStringSetting": "COSMOSDB_CONNECTION_STRING",
"direction": "out"
}
Привязки загружаются средой выполнения функции и являются затем доступен для объекта Context
при запуске:
const updatePackageTrigger: AzureFunction = async function (context: Context): Promise<void> {
const index = context.bindingDefinitions.findIndex(def => def.name === "shipmentDocumentOut")
context.bindingDefinitions[index]
...
}
В приведенном выше фрагменте я обращаюсь к определению привязки. Однако мне нужно получить доступ к полям databaseName
и collectionName
, но они недоступны в интерфейсе:
export interface Context {
bindingDefinitions: BindingDefinition[];
}
export interface BindingDefinition {
name: string;
type: string;
direction: 'in' | 'out' | 'inout' | undefined;
}
Я попытался расширить контекст согласно руководству I найдено, но при его использовании возникает ошибка:
interface BindingContext extends Context {
bindings: {
shipmentDocumentOut: {
collectionName: string,
databaseName: string
}
};
}
// Causes:
Type '(context: BindingContext, packageEvents: PackageEvent[]) => Promise<void>' is not assignable to type 'AzureFunction'.
Types of parameters 'context' and 'context' are incompatible.
Type 'Context' is not assignable to type 'BindingContext'.
Types of property 'bindings' are incompatible.
Property 'shipmentDocumentOut' is missing in type '{ [key: string]: any; }' but required in type '{ shipmentDocumentOut: { collectionName: string; databaseName: string; }; }'
Как я могу получить доступ к свойствам в настроенной привязке? Я предполагаю, что среда выполнения функции использует эти свойства где-то под капотом для подключения к базе данных.