أنواع البيانات المعرفة من قبل المستخدم في Bicep
تعرف على كيفية استخدام أنواع البيانات المعرفة من قبل المستخدم في Bicep. بالنسبة إلى أنواع البيانات المعرفة من قبل النظام، راجع أنواع البيانات.
مطلوب Bicep CLI الإصدار 0.12.X أو أعلى لاستخدام هذه الميزة.
بناء جملة نوع البيانات المعرفة من قبل المستخدم
يمكنك استخدام العبارة type
لتعريف أنواع البيانات المعرفة من قبل المستخدم. بالإضافة إلى ذلك، يمكنك أيضا استخدام تعبيرات النوع في بعض الأماكن لتعريف الأنواع المخصصة.
type <user-defined-data-type-name> = <type-expression>
إشعار
يسمح للمصمم @allowed
فقط في param
العبارات. للإعلان عن أن الخاصية يجب أن تكون واحدة من مجموعة من القيم المعرفة مسبقا في عبارة type
أو output
، استخدم بناء جملة نوع الاتحاد. يمكن أيضا استخدام بناء جملة نوع الاتحاد في param
عبارات .
تتضمن تعبيرات النوع الصالحة ما يلي:
المراجع الرمزية هي معرفات تشير إلى نوع محيط (مثل
string
أوint
) أو رمز نوع معرف من قبل المستخدم تم تعريفه في عبارةtype
:// Bicep data type reference type myStringType = string // user-defined type reference type myOtherStringType = myStringType
القيم الحرفية الأولية، بما في ذلك السلاسل والأعداد الصحيحة والقيم المنطقية، هي تعبيرات نوع صالحة. على سبيل المثال:
// a string type with three allowed values. type myStringLiteralType = 'bicep' | 'arm' | 'azure' // an integer type with one allowed value type myIntLiteralType = 10 // an boolean type with one allowed value type myBoolLiteralType = true
يمكن تعريف أنواع الصفائف عن طريق اللاحقة
[]
إلى أي تعبير نوع صالح:// A string type array type myStrStringsType1 = string[] // A string type array with three allowed values type myStrStringsType2 = ('a' | 'b' | 'c')[] type myIntArrayOfArraysType = int[][] // A mixed-type array with four allowed values type myMixedTypeArrayType = ('fizz' | 42 | {an: 'object'} | null)[]
تحتوي أنواع الكائنات على صفر أو أكثر من الخصائص بين الأقواس المتعرجة:
type storageAccountConfigType = { name: string sku: string }
تتكون كل خاصية في عنصر من مفتاح وقيمة. يتم فصل المفتاح والقيمة بنقطتي النقطتان
:
. قد يكون المفتاح أي سلسلة (يجب إحاطة القيم التي لن تكون معرفا صالحا بعلامات اقتباس)، وقد تكون القيمة أي تعبير بناء جملة من النوع.الخصائص مطلوبة ما لم يكن لها علامة
?
اختيارية بعد قيمة الخاصية. على سبيل المثال، الخاصيةsku
في المثال التالي اختيارية:type storageAccountConfigType = { name: string sku: string? }
يمكن استخدام مصممي الديكور على الخصائص.
*
يمكن استخدام لجعل كافة القيم تتطلب قيدا. لا يزال من الممكن تعريف خصائص إضافية عند استخدام*
. ينشئ هذا المثال كائنا يتطلب مفتاحا من نوع int يسمىid
، وأن تكون كافة الإدخالات الأخرى في الكائن قيمة سلسلة لا تقل عن 10 أحرف.type obj = { @description('The object ID') id: int @description('Additional properties') @minLength(10) *: string }
يوضح النموذج التالي كيفية استخدام بناء جملة نوع الاتحاد لسرد مجموعة من القيم المعرفة مسبقا:
type obj = { level: 'bronze' | 'silver' | 'gold' }
العوديه
قد تستخدم أنواع الكائنات الإعادة المباشرة أو غير المباشرة طالما أن ساق المسار إلى نقطة الإعادة اختيارية على الأقل. على سبيل المثال،
myObjectType
التعريف في المثال التالي صالح لأن الخاصية المتكررة مباشرة اختياريةrecursiveProp
:type myObjectType = { stringProp: string recursiveProp: myObjectType? }
ولكن تعريف النوع التالي لن يكون صالحا لأن أيا من
level1
أوlevel4
level2
level3
أوlevel5
اختياري.type invalidRecursiveObjectType = { level1: { level2: { level3: { level4: { level5: invalidRecursiveObjectType } } } } }
يمكن استخدام عوامل تشغيل Bicep أحادية مع عدد صحيح وحروفي منطقي أو مراجع إلى عدد صحيح أو رموز منطقية مكتوبة بالحرف الحرفي:
type negativeIntLiteral = -10 type negatedIntReference = -negativeIntLiteral type negatedBoolLiteral = !true type negatedBoolReference = !negatedBoolLiteral
قد تتضمن النقابات أي عدد من التعبيرات الحرفية. تتم ترجمة أنواع التوحيد إلى قيد القيمة المسموح بها في Bicep، لذلك يسمح بالأحرف الحرفية فقط كأعضاء.
type oneOfSeveralObjects = {foo: 'bar'} | {fizz: 'buzz'} | {snap: 'crackle'} type mixedTypeArray = ('fizz' | 42 | {an: 'object'} | null)[]
بالإضافة إلى استخدامها في العبارة type
، يمكن أيضا استخدام تعبيرات النوع في هذه الأماكن لإنشاء أنواع بيانات معرفة من قبل المستخدم:
كجملة نوع من عبارة
param
. على سبيل المثال:param storageAccountConfig { name: string sku: string }
:
متابعة في خاصية نوع كائن. على سبيل المثال:param storageAccountConfig { name: string properties: { sku: string } } = { name: 'store$(uniqueString(resourceGroup().id)))' properties: { sku: 'Standard_LRS' } }
[]
يسبق في تعبير نوع صفيف. على سبيل المثال:param mixedTypeArray ('fizz' | 42 | {an: 'object'} | null)[]
يبدو ملف Bicep النموذجي لإنشاء حساب تخزين كما يلي:
param location string = resourceGroup().location
param storageAccountName string
@allowed([
'Standard_LRS'
'Standard_GRS'
])
param storageAccountSKU string = 'Standard_LRS'
resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: storageAccountName
location: location
sku: {
name: storageAccountSKU
}
kind: 'StorageV2'
}
باستخدام أنواع البيانات المعرفة من قبل المستخدم، يمكن أن تبدو كما يلي:
param location string = resourceGroup().location
type storageAccountSkuType = 'Standard_LRS' | 'Standard_GRS'
type storageAccountConfigType = {
name: string
sku: storageAccountSkuType
}
param storageAccountConfig storageAccountConfigType
resource storageAccount 'Microsoft.Storage/storageAccounts@2022-09-01' = {
name: storageAccountConfig.name
location: location
sku: {
name: storageAccountConfig.sku
}
kind: 'StorageV2'
}
تعريف نوع الاتحاد الموسوم
للإعلان عن نوع بيانات اتحاد مخصص ذو علامة داخل ملف Bicep، يمكنك وضع مصمم تمييزي فوق إعلان نوع معرف من قبل المستخدم. مطلوب إصدار Bicep CLI 0.21.X أو أعلى لاستخدام مصمم الديكور هذا. يتشكل بناء الجملة من:
@discriminator('<propertyName>')
يأخذ مصمم الديكور التمييزي معلمة واحدة، والتي تمثل اسم خاصية مشتركة بين جميع أعضاء الاتحاد. يجب أن يكون اسم الخاصية هذا عبارة عن سلسلة حرفية مطلوبة على جميع الأعضاء وأن يكون حساسا لحالة الأحرف. ويجب أن تكون قيم الممتلكات التمييزية على أعضاء النقابة فريدة من نوعها بطريقة غير حساسة لحالة الأحرف.
يوضح المثال التالي كيفية الإعلان عن نوع اتحاد له علامة:
type FooConfig = {
type: 'foo'
value: int
}
type BarConfig = {
type: 'bar'
value: bool
}
@discriminator('type')
type ServiceConfig = FooConfig | BarConfig | { type: 'baz', *: string }
param serviceConfig ServiceConfig = { type: 'bar', value: true }
output config object = serviceConfig
يتم التحقق من قيمة المعلمة استنادا إلى قيمة الخاصية المميزة. في المثال السابق، إذا كانت قيمة معلمة serviceConfig من نوع foo، فإنها تخضع للتحقق من الصحة باستخدام نوع FooConfig. وبالمثل، إذا كانت قيمة المعلمة من شريط النوع، يتم إجراء التحقق من الصحة باستخدام نوع BarConfig، ويستمر هذا النمط لأنواع أخرى أيضا.
أنواع الاستيراد بين ملفات Bicep (معاينة)
مطلوب Bicep CLI الإصدار 0.21.X أو أعلى لاستخدام ميزة استيراد وقت التحويل البرمجي هذه. يجب تمكين العلامة compileTimeImports
التجريبية من ملف تكوين Bicep.
يمكن استيراد أنواع البيانات المعرفة من قبل المستخدم التي تحمل @export()
مصمم الديكور فقط إلى قوالب أخرى. حاليا، لا يمكن استخدام هذا المصمم إلا في type
العبارات.
يمكنك المثال التالي من استيراد نوعي البيانات المعرفين من قبل المستخدم من قوالب أخرى:
@export()
type myStringType = string
@export()
type myOtherStringType = myStringType
لمزيد من المعلومات، راجع استيراد أنواع البيانات المعرفة من قبل المستخدم.
الخطوات التالية
- للحصول على قائمة أنواع بيانات Bicep، راجع أنواع البيانات.
الملاحظات
https://aka.ms/ContentUserFeedback.
قريبًا: خلال عام 2024، سنتخلص تدريجيًا من GitHub Issues بوصفها آلية إرسال ملاحظات للمحتوى ونستبدلها بنظام ملاحظات جديد. لمزيد من المعلومات، راجعإرسال الملاحظات وعرضها المتعلقة بـ