Bicep'te kullanıcı tanımlı veri türleri
Bicep'te kullanıcı tanımlı veri türlerini kullanmayı öğrenin.
Bu özelliği kullanmak için Bicep CLI sürüm 0.12.X veya üzeri gereklidir.
Kullanıcı tanımlı veri türü söz dizimi
Kullanıcı tanımlı veri türlerini tanımlamak 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>
Dekont
Dekoratöre yalnızca deyimlerde izin verilirparam
.@allowed
Bir özelliğin veya output
deyiminde type
önceden tanımlanmış bir değer kümesinden biri olması gerektiğini bildirmek için birleşim türü söz dizimini kullanın. Birleşim türü söz dizimi deyimlerde param
de kullanılabilir.
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
Dizi türleri, geçerli herhangi bir tür ifadesine son eklenerek
[]
bildirilebilir:// 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 }
Bir nesnedeki her özellik anahtar ve değerden oluşur. Anahtar ve değer iki nokta üst üste
:
ile ayrılır. Anahtar herhangi bir dize olabilir (geçerli bir tanımlayıcı olmayacak değerler tırnak içine alınmalıdır) ve değer herhangi bir tür söz dizimi ifadesi 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ırken*
ek özellikler yine de tanımlanabilir. Bu örnek, adlıid
int türünde 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 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@2022-09-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@2022-09-01' = {
name: storageAccountConfig.name
location: location
sku: {
name: storageAccountConfig.sku
}
kind: 'StorageV2'
}
Etiketli birleşim türünü bildirme
Bicep dosyası içinde özel etiketli birleşim veri türü bildirmek için, kullanıcı tanımlı tür bildiriminin üzerine ayrıştırıcı bir dekoratör yerleştirebilirsiniz. Bu dekoratörü kullanmak için Bicep CLI sürüm 0.21.X veya üzeri gereklidir. Söz dizimi aşağıdaki gibidir:
@discriminator('<propertyName>')
Ayrımcı dekoratör, tüm birleşim üyeleri arasında paylaşılan özellik adını temsil eden tek bir parametre alır. Bu özellik adı tüm üyeler için gerekli bir dize değişmez değeri olmalıdır ve büyük/küçük harfe duyarlıdır. Birleşim üyelerindeki ayrımcı özelliğin değerleri büyük/küçük harfe duyarsız bir şekilde benzersiz olmalıdır.
Aşağıdaki örnekte etiketli birleşim türünün nasıl bildir olduğu 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
Parametre değeri, ayrımcı özellik değerine göre doğrulanır. Yukarıdaki örnekte serviceConfig parametre değeri foo türündeyse FooConfigtürü kullanılarak doğrulama yapılır. Benzer şekilde, parametre değeri çubuk türündeyse, doğrulama BarConfig türü kullanılarak gerçekleştirilir ve bu desen diğer türler için de devam eder.
Bicep dosyaları arasında türleri içeri aktarma (Önizleme)
Bu derleme zamanı içeri aktarma özelliğini kullanmak için Bicep CLI sürüm 0.21.X veya üzeri gereklidir. Deneysel bayrağın compileTimeImports
Bicep yapılandırma dosyasından etkinleştirilmesi gerekir.
Yalnızca dekoratörü taşıyan @export()
kullanıcı tanımlı veri türleri diğer şablonlara aktarılabilir. Şu anda bu dekoratör yalnızca deyimlerde type
kullanı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.