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.
Bu özelliği kullanmak için Bicep CLI sürüm 0.12.X veya üzeri gereklidir.
Sözdizimi
Kullanıcı tanımlı veri türleri oluşturmak için deyimini type
kullanabilirsiniz. Ayrıca, özel türleri tanımlamak için bazı yerlerde tür ifadelerini de kullanabilirsiniz.
type <user-defined-data-type-name> = <type-expression>
@allowed
Dekoratöre yalnızca deyimlerde izin verilirparam
. 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 nonidentifier değerleri eklenebilir ve 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örler özelliklerde kullanılabilir.
*
tüm değerlerin bir kısıtlama gerektirmesini sağlamak için kullanılabilir. kullanılırken*
ek özellikler tanımlanabilir. Bu örnek, id türündeint
bir anahtar gerektiren ve nesnedeki diğer tüm girişlerin en az 10 karakter uzunluğunda bir dize değeri olması gereken bir nesne oluşturur.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
Özyineleme noktasına giden yolun en az bir ayağı isteğe bağlı olduğu sürece 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? }
Ancak , ,
level2
,level3
level4
veyalevel5
isteğe bağlı olmadığındanlevel1
aşağıdaki tür tanımı geçerli olmaz.type invalidRecursiveObjectType = { level1: { level2: { level3: { level4: { level5: invalidRecursiveObjectType } } } } }
Bicep tekli işleçleri tamsayı ve boole değişmez değerleriyle ya da tamsayı veya boole sabit değer türündeki simgelere başvurularla kullanılabilir:
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)[]
Deyiminde type
kullanılmaya ek olarak, tür ifadeleri de kullanıcı tanımlı veri türleri oluşturmak için şu yerlerde kullanılabilir:
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ürlerini kullanarak aşağıdaki gibi 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'
}
Hata düzeyini yükseltme
Varsayılan olarak, Bicep'te bir nesne türünü bildirmek, herhangi bir türün ek özelliklerini kabul etmesine olanak tanır. Örneğin, aşağıdaki Bicep geçerlidir ancak [BCP089] The property "otionalProperty" is not allowed on objects of type "{ property: string, optionalProperty: null | string }". Did you mean "optionalProperty"?
- uyarısını verir:
type anObject = {
property: string
optionalProperty: string?
}
param aParameter anObject = {
property: 'value'
otionalProperty: 'value'
}
Uyarı, anObject türünün otionalProperty adlı bir özellik içermediğini size bildirir. Dağıtım sırasında hata oluşmasa da, Bicep derleyicisi otionalProperty'nin bir yazım hatası olduğunu, isteğe bağlıProperty kullanmayı amaçladığınız ama yanlış yazdığını ve tutarsızlık konusunda sizi uyardığını varsayar.
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'
}
ARM dağıtım altyapısı, ek özellikler için korumalı türleri de denetler. Korumalı parametreler için ek özellikler sağlanması doğrulama hatasına neden olur ve 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 dosyaları arasında türleri içeri aktarma
Yalnızca dekoratörü taşıyan @export()
kullanıcı tanımlı veri türleri diğer şablonlara aktarılabilir.
Aşağıdaki örnek, diğer şablonlardan kullanıcı tanımlı iki veri türünü içeri aktarmanızı sağlar:
@export()
type myStringType = string
@export()
type myOtherStringType = myStringType
Daha fazla bilgi için bkz . Kullanıcı tanımlı veri türlerini içeri aktarma.
Sonraki adımlar
- Bicep veri türlerinin listesi için bkz . Veri türleri.