Bicep'te kullanıcı tanımlı veri türleri

Bicep'te kullanıcı tanımlı veri türleri oluşturmayı öğrenin. Sistem tanımlı veri türleri için bkz . Veri türleri. Kullanıcı tanımlı veri türlerinin kullanılması, dil sürümü 2.0 kod oluşturmayı otomatik olarak etkinleştirir.

Bu özelliği kullanmak için Bicep CLI sürüm 0.12.X veya üzeri gereklidir.

Türleri tanımlama

Kullanıcı tanımlı veri türleri oluşturmak için deyimini type kullanabilirsiniz. Özel türleri tanımlamak için bazı yerlerde tür ifadelerini de kullanabilirsiniz.

@<decorator>(<argument>)
type <user-defined-data-type-name> = <type-expression>

@allowed Dekoratöre yalnızca param deyimlerde izin verilir. içinde önceden tanımlanmış değerler typekümesi olan bir tür bildirmek için birleşim türü söz dizimini kullanın.

Geçerli tür ifadeleri şunlardır:

  • Sembolik başvurular, bir ortam türüne (veya gibiintstring) veya bir deyimde type bildirilen kullanıcı tanımlı tür simgesine başvuran tanımlayıcılardır:

    // Bicep data type reference
    type myStringType = string
    
    // user-defined type reference
    type myOtherStringType = myStringType
    
  • Dizeler, tamsayılar ve Boole değerleri de dahil olmak üzere ilkel değişmez değerler geçerli tür ifadeleridir. Örneğin:

    // 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
    
  • Geçerli bir tür ifadesine ekleyerek [] dizi türlerini bildirebilirsiniz:

    // 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)[]
    
  • Nesne türleri küme ayraçları arasında sıfır veya daha fazla özellik içerir:

    type storageAccountConfigType = {
      name: string
      sku: string
    }
    

    Nesnedeki her özellik bir anahtardan ve iki nokta üst üste :ile ayrılmış bir değerden oluşur. Anahtar herhangi bir dize olabilir ve tırnak içine alınmış tanımlayıcı değerleri olabilir. Değer herhangi bir ifade türü olabilir.

    Özellik değerinden sonra isteğe bağlı bir işaretçisi ? olmadığı sürece özellikler gereklidir. Örneğin, sku aşağıdaki örnekteki özelliği isteğe bağlıdır:

    type storageAccountConfigType = {
      name: string
      sku: string?
    }
    

    Dekoratörleri özelliklerde kullanabilirsiniz. Tüm değerlerin kısıtlama gerektirmesini sağlamak için yıldız işareti (*) kullanabilirsiniz. kullanarak *daha fazla özellik tanımlayabilirsiniz. Bu örnek, adlı idtürde int bir anahtar gerektiren bir nesne oluşturur. Nesnedeki diğer tüm girdiler en az 10 karakter uzunluğunda bir dize değeri olmalıdır.

    type obj = {
      @description('The object ID')
      id: int
    
      @description('Additional properties')
      @minLength(10)
      *: string
    }
    

    Aşağıdaki örnekte, önceden tanımlanmış değerler kümesini listelemek için birleşim türü söz diziminin nasıl kullanılacağı gösterilmektedir:

    type directions = 'east' | 'south' | 'west' | 'north'
    
    type obj = {
      level: 'bronze' | 'silver' | 'gold'
    }
    
  • Özyineleme noktasına giden yolun en azından ayağı isteğe bağlıysa nesne türleri doğrudan veya dolaylı özyineleme kullanabilir. Örneğin, myObjectType doğrudan özyinelemeli recursiveProp özelliği isteğe bağlı olduğundan aşağıdaki örnekteki tanım geçerlidir:

    type myObjectType = {
      stringProp: string
      recursiveProp: myObjectType?
    }
    

    Aşağıdaki tür tanımı, , , level2level3, level4veya level5 isteğe bağlı olmadığından level1geçerli olmaz.

    type invalidRecursiveObjectType = {
      level1: {
        level2: {
          level3: {
            level4: {
              level5: invalidRecursiveObjectType
            }
          }
        }
      }
    }
    
  • Bicep tekli işleçlerini tamsayı ve Boole değişmez değerleriyle ya da tamsayı veya Boole değişmez değer türündeki simgelere başvurularla kullanabilirsiniz:

    type negativeIntLiteral = -10
    type negatedIntReference = -negativeIntLiteral
    
    type negatedBoolLiteral = !true
    type negatedBoolReference = !negatedBoolLiteral
    
  • Birleşimler, herhangi bir sayıda değişmez değer türünde ifade içerebilir. Birleşim türleri Bicep'te izin verilen değer kısıtlamasına çevrilir, bu nedenle üye olarak yalnızca değişmez değerlere izin verilir.

    type oneOfSeveralObjects = {foo: 'bar'} | {fizz: 'buzz'} | {snap: 'crackle'}
    type mixedTypeArray = ('fizz' | 42 | {an: 'object'} | null)[]
    

Deyimde type tür ifadelerini kullanabilir ve aşağıdaki yerlerde gösterildiği gibi kullanıcı tanımlı veri türleri oluşturmak için tür ifadelerini de kullanabilirsiniz:

  • Bir param deyiminin type yan tümcesi olarak. Örneğin:

    param storageAccountConfig {
      name: string
      sku: string
    }
    
  • : bir nesne türü özelliğinde öğesini takip eder. Örneğin:

    param storageAccountConfig {
     name: string
      properties: {
        sku: string
      }
    } = {
      name: 'store$(uniqueString(resourceGroup().id)))'
      properties: {
        sku: 'Standard_LRS'
      }
    }
    
  • bir dizi türü ifadesinde öğesinin [] önüne. Örneğin:

    param mixedTypeArray ('fizz' | 42 | {an: 'object'} | null)[]
    

Depolama hesabı oluşturmak için tipik bir Bicep dosyası şöyle görünür:

param location string = resourceGroup().location
param storageAccountName string

@allowed([
  'Standard_LRS'
  'Standard_GRS'
])
param storageAccountSKU string = 'Standard_LRS'

resource storageAccount 'Microsoft.Storage/storageAccounts@2023-04-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: storageAccountSKU
  }
  kind: 'StorageV2'
}

Kullanıcı tanımlı veri türleriyle şu şekilde görünebilir:

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@2023-04-01' = {
  name: storageAccountConfig.name
  location: location
  sku: {
    name: storageAccountConfig.sku
  }
  kind: 'StorageV2'
}

Dekoratörleri kullanma

Dekoratörler biçiminde @expression yazılır ve kullanıcı tanımlı veri türünün bildirimlerinin üzerine yerleştirilir. Aşağıdaki tabloda, kullanıcı tanımlı veri türleri için kullanılabilir dekoratörler gösterilmektedir.

Dekoratör Uygula Bağımsız değişken Açıklama
Açıklama tümü Dize Kullanıcı tanımlı veri türü için açıklamalar sağlayın.
Discriminator nesne Dize Doğru alt sınıfın tanımlandığından ve yönetildiğinden emin olmak için bu dekoratörü kullanın.
export tümü yok Kullanıcı tanımlı veri türünün başka bir Bicep dosyası tarafından içeri aktarılabilmesini gösterir.
maxLength dizi, dize int Dize ve dizi veri türleri için uzunluk üst sınırı. Değer kapsayıcıdır.
maxValue int int Tamsayı veri türlerinin en büyük değeri. Bu değer dahildir.
meta veriler tümü nesne Veri türlerine uygulanacak özel özellikler. Açıklama dekoratörüne eşdeğer bir açıklama özelliği içerebilir.
minLength dizi, dize int Dize ve dizi veri türleri için en düşük uzunluk. Değer kapsayıcıdır.
minValue int int Tamsayı veri türlerinin en düşük değeri. Bu değer dahildir.
sealed nesne yok BcP089'ı uyarıdan, kullanıcı tanımlı bir veri türünün özellik adının yazım hatası olması durumunda bir hataya yükseltin. Daha fazla bilgi için bkz . Hata düzeyini yükseltme.
güvenli dize, nesne yok Türleri güvenli olarak işaretler. Güvenli bir türün değeri dağıtım geçmişine kaydedilmez ve günlüğe kaydedilmez. Daha fazla bilgi için bkz . Güvenli dizeler ve nesneler.

Dekoratörler sys ad alanındadır. Dekoratörü aynı ada sahip başka bir öğeden ayırt etmeniz gerekiyorsa, dekoratörün önüne ile yazın sys. Örneğin, Bicep dosyanız adlı descriptionbir değişken içeriyorsa, dekoratör kullanırken sys ad alanını description eklemeniz gerekir.

Discriminator

Bkz. Etiketli birleşim veri türü.

Açıklama

Kullanıcı tanımlı veri türüne bir açıklama ekleyin. Dekoratörleri özelliklerde kullanabilirsiniz. Örneğin:

@description('Define a new object type.')
type obj = {
  @description('The object ID')
  id: int

  @description('Additional properties')
  @minLength(10)
  *: string
}

Açıklama metni için Markdown biçimli metin kullanabilirsiniz.

Export

Kullanıcı tanımlı veri türünü diğer Bicep dosyalarıyla paylaşmak için kullanın @export() . Daha fazla bilgi için bkz . Değişkenleri, türleri ve işlevleri dışarı aktarma.

Tamsayı kısıtlamaları

Tamsayı türü için en düşük ve en yüksek değerleri ayarlayabilirsiniz. Bir veya iki kısıtlama ayarlayabilirsiniz.

@minValue(1)
@maxValue(12)
type month int

Uzunluk kısıtlamaları

Dize ve dizi türleri için en düşük ve en fazla uzunlukları belirtebilirsiniz. Bir veya iki kısıtlama ayarlayabilirsiniz. Dizeler için uzunluk, karakter sayısını gösterir. Diziler için uzunluk, dizideki öğe sayısını gösterir.

Aşağıdaki örnekte iki tür bildirmektedir. Bir tür, 3 ile 24 karakter arasında olması gereken bir depolama hesabı adıdır. Diğer tür, bir ila beş öğeye sahip olması gereken bir dizidir.

@minLength(3)
@maxLength(24)
type storageAccountName string

@minLength(1)
@maxLength(5)
type appNames array

Meta veri

Kullanıcı tanımlı veri türüne uygulamak istediğiniz özel özellikleriniz varsa, meta veri dekoratörü ekleyin. Meta veriler içinde, özel adlara ve değerlere sahip bir nesne tanımlayın. Meta veriler için tanımladığınız nesne herhangi bir adın ve türün özelliklerini içerebilir.

Açıklamaya eklemek için anlamlı olmayan veri türü hakkındaki bilgileri izlemek için bu dekoratörü kullanabilirsiniz.

@description('Configuration values that are applied when the application starts.')
@metadata({
  source: 'database'
  contact: 'Web team'
})
type settings object

Bir dekoratöre başka bir @metadata() dekoratörle çakşan bir özellik sağladığınızda, bu dekoratör her zaman dekoratördeki @metadata() her şeyden öncelikli olur. Bu nedenle, değeri içindeki @metadata() çakışan özellik yedekli olur ve değiştirilir. Daha fazla bilgi için bkz . Çakışan meta veri yok.

Mühürlü

Bkz . Hata düzeyini yükseltme.

Güvenli türler

Bir dizeyi veya nesne kullanıcı tanımlı veri türünü güvenli olarak işaretleyebilirsiniz. Güvenli bir türün değeri dağıtım geçmişine kaydedilmez ve günlüğe kaydedilmez.

@secure()
type demoPassword string

@secure()
type demoSecretObject object

Hata düzeyini yükseltme

Varsayılan olarak, Bicep'te bir nesne türünü bildirmek, herhangi bir türün daha fazla özelliğini kabul etmesine olanak tanır. Örneğin, aşağıdaki Bicep geçerlidir ancak [BCP089] uyarısını oluşturur: : The property "otionalProperty" is not allowed on objects of type "{ property: string, optionalProperty: null | string }". Did you mean "optionalProperty"?

type anObject = {
  property: string
  optionalProperty: string?
}
 
param aParameter anObject = {
  property: 'value'
  otionalProperty: 'value'
}

Uyarı, türün anObject adlı otionalPropertybir özellik içermediğini size bildirir. Dağıtım sırasında hata oluşmasa da, Bicep derleyicisi bunun bir yazım hatası olduğunu ve kullanmayı optionalProperty amaçladığınız ama yanlış yazıldığını varsayarotionalProperty. Bicep tutarsızlık konusunda sizi uyarır.

Bu uyarıları hatalara ilerletmek için dekoratörü nesne türüne uygulayın @sealed() :

@sealed() 
type anObject = {
  property: string
  optionalProperty?: string
}

Dekoratörü param bildirime @sealed() uygulayarak aynı sonuçları elde edersiniz:

type anObject = {
  property: string
  optionalProperty: string?
}
 
@sealed() 
param aParameter anObject = {
  property: 'value'
  otionalProperty: 'value'
}

Azure Resource Manager dağıtım altyapısı, diğer özellikler için korumalı türleri de denetler. Korumalı parametreler için ek özellikler sağlanması doğrulama hatasına neden olur ve bu da dağıtımın başarısız olmasına neden olur. Örneğin:

@sealed()
type anObject = {
  property: string
}

param aParameter anObject = {
  property: 'value'
  optionalProperty: 'value'
}

Etiketli birleşim veri türü

Bicep dosyasında özel etiketli birleşim veri türü bildirmek için kullanıcı tanımlı tür bildiriminin üzerine bir discriminator dekoratör yerleştirebilirsiniz. Bu dekoratörü kullanmak için Bicep CLI sürüm 0.21.X veya üzeri gereklidir. Aşağıdaki örnekte etiketli birleşim veri türü bildirme gösterilmektedir:

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

Daha fazla bilgi için bkz . Özel etiketli birleşim veri türü.

Bicep veri türlerinin listesi için bkz . Veri türleri.