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 type
kü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 gibi
int
string
) veya bir deyimdetype
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ıid
türdeint
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 özyinelemelirecursiveProp
ö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ı, , ,
level2
level3
,level4
veyalevel5
isteğe bağlı olmadığındanlevel1
geç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ı description
bir 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ı otionalProperty
bir ö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ü.
İlgili içerik
Bicep veri türlerinin listesi için bkz . Veri türleri.