أنواع البيانات المعرفة من قبل المستخدم في 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أو level4level2level3أو 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، راجع أنواع البيانات.