Felhasználó által definiált adattípusok a Bicepben
Megtudhatja, hogyan használhat felhasználó által definiált adattípusokat a Bicepben.
A funkció használatához a Bicep CLI 0.12.X vagy újabb verziója szükséges.
Felhasználó által definiált adattípus szintaxisa
Az type
utasítás használatával definiálhat felhasználó által definiált adattípusokat. Emellett egyes helyeken típuskifejezéseket is használhat egyéni típusok definiálásához.
type <user-defined-data-type-name> = <type-expression>
Megjegyzés:
A @allowed
dekoratőr csak a nyilatkozatokban param
engedélyezett. Ha azt szeretné deklarálni, hogy egy tulajdonságnak egy vagy output
utasításban előre definiált értékek type
egyikének kell lennie, használja az egyesítő típusú szintaxist. Az egyesítő típusú szintaxis az utasításokban param
is használható.
Az érvényes típuskifejezések a következők:
A szimbolikus hivatkozások olyan azonosítók, amelyek környezeti típusra (például
string
vagyint
) vagy egy utasításban deklarált felhasználó által definiált típusszimbólumratype
hivatkoznak:// Bicep data type reference type myStringType = string // user-defined type reference type myOtherStringType = myStringType
A primitív literálok, beleértve a sztringeket, az egész számokat és a logikai értékeket, érvényes típuskifejezések. Például:
// 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 tömbtípusok bármely érvényes típuskifejezés utótagjával
[]
deklarálhatók:// 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)[]
Az objektumtípusok nulla vagy több tulajdonságot tartalmaznak a kapcsos zárójelek között:
type storageAccountConfigType = { name: string sku: string }
Egy objektum minden tulajdonsága kulcsból és értékből áll. A kulcsot és az értéket kettőspont
:
választja el egymástól. A kulcs lehet bármilyen sztring (az érvényes azonosítót nem tartalmazó értékeket idézőjelek közé kell tenni), az érték pedig bármilyen típusú szintaxiskifejezés lehet.A tulajdonságok csak akkor szükségesek, ha a tulajdonság értéke után választhatósági jelölővel
?
rendelkeznek. A következő példában szereplő tulajdonság példáulsku
nem kötelező:type storageAccountConfigType = { name: string sku: string? }
Dekorátorok használhatók a tulajdonságokon.
*
használható arra, hogy az összes érték kényszert igényeljen. A további tulajdonságok továbbra is meghatározhatók a használat*
során. Ez a példa létrehoz egy objektumot, amely egy int nevűid
típuskulcsot igényel, és hogy az objektum többi bejegyzésének legalább 10 karakter hosszúságú sztringértéknek kell lennie.type obj = { @description('The object ID') id: int @description('Additional properties') @minLength(10) *: string }
Az alábbi minta bemutatja, hogyan használható az egyesítő típusú szintaxis az előre definiált értékek listájára:
type obj = { level: 'bronze' | 'silver' | 'gold' }
Rekurzió
Az objektumtípusok közvetlen vagy közvetett rekurziót használhatnak mindaddig, amíg a rekurziós pont elérési útjának legalább a lába nem kötelező. A következő példában szereplő definíció például érvényes,
myObjectType
mert a közvetlenül rekurzívrecursiveProp
tulajdonság nem kötelező:type myObjectType = { stringProp: string recursiveProp: myObjectType? }
A következő típusdefiníció azonban nem lenne érvényes, mert egyik sem
level1
,level3
level2
level4
vagylevel5
nem kötelező.type invalidRecursiveObjectType = { level1: { level2: { level3: { level4: { level5: invalidRecursiveObjectType } } } } }
A Bicep nem szereplő operátorok egész számokkal és logikai literálokkal, illetve egész számra vagy logikai literál típusú szimbólumokra mutató hivatkozásokkal használhatók:
type negativeIntLiteral = -10 type negatedIntReference = -negativeIntLiteral type negatedBoolLiteral = !true type negatedBoolReference = !negatedBoolLiteral
Az egyesítők tetszőleges számú literál típusú kifejezést tartalmazhatnak. Az egyesítő típusok a Bicep megengedett értékkorlátjába vannak lefordítva, így tagokként csak a literálok engedélyezettek.
type oneOfSeveralObjects = {foo: 'bar'} | {fizz: 'buzz'} | {snap: 'crackle'} type mixedTypeArray = ('fizz' | 42 | {an: 'object'} | null)[]
Az utasításban type
való használat mellett típuskifejezések is használhatók ezeken a helyeken a felhasználó által definiált adattípusok létrehozásához:
Egy utasítás típuskikötéseként
param
. Például:param storageAccountConfig { name: string sku: string }
:
Az objektumtípus tulajdonságot követve. Például:param storageAccountConfig { name: string properties: { sku: string } } = { name: 'store$(uniqueString(resourceGroup().id)))' properties: { sku: 'Standard_LRS' } }
[]
A tömbtípus-kifejezés előtt. Például:param mixedTypeArray ('fizz' | 42 | {an: 'object'} | null)[]
Egy tárfiók létrehozásához használt tipikus Bicep-fájl a következőképpen néz ki:
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'
}
Felhasználó által definiált adattípusok használatával a következőképpen nézhet ki:
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'
}
Címkézett egyesítő típus deklarálása
Ha egyéni címkézett egyesítő adattípust szeretne deklarálni egy Bicep-fájlban, a felhasználó által meghatározott típusú deklarálás fölé helyezhet egy diszkriminatív deklarátort. A dekorátor használatához a Bicep CLI 0.21.X-es vagy újabb verziója szükséges. A szintaxis a következő:
@discriminator('<propertyName>')
A diszkriminatív dekorátor egyetlen paramétert vesz fel, amely az összes szakszervezeti tag közös tulajdonnevét jelöli. Ennek a tulajdonságnévnek kötelező sztringkonstansnak kell lennie az összes tagon, és megkülönbözteti a kis- és nagybetűk megkülönböztetése. A szakszervezeti tagok hátrányos megkülönböztetett tulajdonságának értékeinek egyedinek kell lenniük kis- és nagybetűket nem megkülönböztető módon.
Az alábbi példa bemutatja, hogyan deklarálhat címkézett egyesítő típust:
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
A paraméter értéke a megkülönböztető tulajdonság értéke alapján lesz érvényesítve. Az előző példában, ha a serviceConfig paraméter értéke foo típusú, akkor a FooConfigtípus használatával végez ellenőrzést. Hasonlóképpen, ha a paraméter értéke típussáv, az érvényesítés a BarConfig típussal történik, és ez a minta más típusok esetében is folytatódik.
Típusok importálása Bicep-fájlok között (előzetes verzió)
A bicep CLI 0.21.X vagy újabb verziója szükséges a fordítási idő importálási funkció használatához. A kísérleti jelzőt compileTimeImports
engedélyezni kell a Bicep konfigurációs fájlból.
Más sablonokba csak a @export()
dekoratőrt tartalmazó felhasználó által definiált adattípusok importálhatók. Ez a dekorátor jelenleg csak utasításokban type
használható.
Az alábbi példa lehetővé teszi a két felhasználó által definiált adattípus importálását más sablonokból:
@export()
type myStringType = string
@export()
type myOtherStringType = myStringType
További információ: Felhasználó által definiált adattípusok importálása.
További lépések
- A Bicep-adattípusok listáját az Adattípusok című témakörben találja.