Jenis data yang ditentukan pengguna di Bicep
Pelajari cara membuat jenis data yang ditentukan pengguna di Bicep. Untuk jenis data yang ditentukan sistem, lihat Jenis data. Menggunakan jenis data yang ditentukan pengguna secara otomatis mengaktifkan pembuatan kode bahasa versi 2.0 .
Bicep CLI versi 0.12.X atau yang lebih tinggi diperlukan untuk menggunakan fitur ini.
Tentukan jenis
Anda dapat menggunakan type
pernyataan untuk membuat jenis data yang ditentukan pengguna. Anda juga dapat menggunakan ekspresi jenis di beberapa tempat untuk menentukan jenis kustom.
@<decorator>(<argument>)
type <user-defined-data-type-name> = <type-expression>
Dekorator @allowed
hanya diizinkan pada param
pernyataan. Untuk mendeklarasikan jenis dengan sekumpulan nilai yang telah ditentukan sebelumnya dalam type
, gunakan sintaks jenis union.
Ekspresi jenis yang valid meliputi:
Referensi simbolis adalah pengidentifikasi yang merujuk ke jenis sekitar (seperti
string
atauint
) atau simbol jenis yang ditentukan pengguna yang dideklarasikan dalamtype
pernyataan:// Bicep data type reference type myStringType = string // user-defined type reference type myOtherStringType = myStringType
Literal primitif, termasuk string, bilangan bulat, dan Boolean, adalah ekspresi jenis yang valid. Contohnya:
// 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
Anda dapat mendeklarasikan jenis array dengan menambahkan
[]
ke ekspresi jenis yang valid:// 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)[]
Jenis objek berisi nol atau lebih properti di antara tanda kurung kurawal:
type storageAccountConfigType = { name: string sku: string }
Setiap properti dalam objek terdiri dari kunci dan nilai yang dipisahkan oleh titik dua
:
. Kunci dapat berupa string apa pun, dengan nilai nonidentifier yang diapit dalam tanda kutip. Nilai dapat berupa semua jenis ekspresi.Properti diperlukan kecuali memiliki penanda
?
opsionalitas setelah nilai properti. Misalnya,sku
properti dalam contoh berikut bersifat opsional:type storageAccountConfigType = { name: string sku: string? }
Anda dapat menggunakan dekorator pada properti. Anda dapat menggunakan tanda bintang (
*
) untuk membuat semua nilai memerlukan batasan. Anda dapat menentukan lebih banyak properti dengan menggunakan*
. Contoh ini membuat objek yang memerlukan kunci jenisint
bernamaid
. Semua entri lain dalam objek harus memiliki nilai string minimal 10 karakter.type obj = { @description('The object ID') id: int @description('Additional properties') @minLength(10) *: string }
Sampel berikut menunjukkan cara menggunakan sintaks jenis union untuk mencantumkan sekumpulan nilai yang telah ditentukan sebelumnya:
type directions = 'east' | 'south' | 'west' | 'north' type obj = { level: 'bronze' | 'silver' | 'gold' }
Jenis objek dapat menggunakan rekursi langsung atau tidak langsung jika setidaknya kaki jalur ke titik rekursi bersifat opsional. Misalnya,
myObjectType
definisi dalam contoh berikut valid karena properti rekursifrecursiveProp
langsung bersifat opsional:type myObjectType = { stringProp: string recursiveProp: myObjectType? }
Definisi jenis berikut tidak akan valid karena tidak ada
level1
, ,level2
level3
,level4
, ataulevel5
opsional.type invalidRecursiveObjectType = { level1: { level2: { level3: { level4: { level5: invalidRecursiveObjectType } } } } }
Anda dapat menggunakan operator unary Bicep dengan bilangan bulat dan literal Boolean atau referensi ke simbol integer atau boolean yang ditik literal:
type negativeIntLiteral = -10 type negatedIntReference = -negativeIntLiteral type negatedBoolLiteral = !true type negatedBoolReference = !negatedBoolLiteral
Gabungan dapat menyertakan sejumlah ekspresi yang dititik harfiah. Jenis gabungan diterjemahkan ke dalam batasan nilai yang diizinkan di Bicep, sehingga hanya literal yang diizinkan sebagai anggota.
type oneOfSeveralObjects = {foo: 'bar'} | {fizz: 'buzz'} | {snap: 'crackle'} type mixedTypeArray = ('fizz' | 42 | {an: 'object'} | null)[]
Anda bisa menggunakan ekspresi jenis dalam type
pernyataan, dan Anda juga bisa menggunakan ekspresi jenis untuk membuat jenis data yang ditentukan pengguna, seperti yang diperlihatkan di tempat-tempat berikut:
Sebagai klausa
param
jenis pernyataan. Contohnya:param storageAccountConfig { name: string sku: string }
:
Mengikuti dalam properti jenis objek. Contohnya:param storageAccountConfig { name: string properties: { sku: string } } = { name: 'store$(uniqueString(resourceGroup().id)))' properties: { sku: 'Standard_LRS' } }
[]
Sebelum dalam ekspresi jenis array. Contohnya:param mixedTypeArray ('fizz' | 42 | {an: 'object'} | null)[]
File Bicep umum untuk membuat akun penyimpanan terlihat seperti:
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'
}
Dengan jenis data yang ditentukan pengguna, jenis data dapat terlihat seperti:
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'
}
Menggunakan dekorator
Dekorator ditulis dalam format @expression
dan ditempatkan di atas deklarasi jenis data yang ditentukan pengguna. Tabel berikut ini memperlihatkan dekorator yang tersedia untuk jenis data yang ditentukan pengguna.
Dekorator | Terapkan ke | Argumen | Deskripsi |
---|---|---|---|
description | all | string | Berikan deskripsi untuk jenis data yang ditentukan pengguna. |
diskriminator | object | string | Gunakan dekorator ini untuk memastikan subkelas yang benar diidentifikasi dan dikelola. |
ekspor | all | tidak ada | Menunjukkan bahwa jenis data yang ditentukan pengguna tersedia untuk diimpor oleh file Bicep lain. |
maxLength | array, untai (karakter) | int | Panjang maksimum untuk jenis data string dan array. Nilainya inklusif. |
maxValue | int | int | Nilai maksimum untuk jenis data bilangan bulat. Nilai ini inklusif. |
metadata | all | object | Properti kustom untuk diterapkan ke jenis data. Dapat menyertakan properti deskripsi yang setara dengan dekorator deskripsi. |
minLength | array, untai (karakter) | int | Panjang minimum untuk jenis data string dan array. Nilainya inklusif. |
minValue | int | int | Nilai minimum untuk jenis data bilangan bulat. Nilai ini inklusif. |
disegel | object | tidak ada | Tingkatkan BCP089 dari peringatan ke kesalahan ketika nama properti dari jenis data yang ditentukan pengguna kemungkinan salah ketik. Untuk informasi selengkapnya, lihat Meningkatkan tingkat kesalahan. |
aman | untai (karakter), objek | tidak ada | Menandai jenis sebagai aman. Nilai untuk jenis aman tidak disimpan ke riwayat penyebaran dan tidak dicatat. Untuk informasi lebih lanjut, lihat Untai (karakter) dan objek yang aman. |
Dekotaror berada dalam namespace layanan sys. Jika Anda perlu membedakan suatu dekorator dari item lainnya dengan nama yang sama, awali dekorator dengan sys
. Misalnya, jika file Bicep Anda menyertakan variabel bernama description
, Anda harus menambahkan sys
namespace saat Anda menggunakan description
dekorator.
Diskriminator
Lihat Jenis data union yang ditandai.
Deskripsi
Tambahkan deskripsi ke jenis data yang ditentukan pengguna. Anda dapat menggunakan dekorator pada properti. Contohnya:
@description('Define a new object type.')
type obj = {
@description('The object ID')
id: int
@description('Additional properties')
@minLength(10)
*: string
}
Anda dapat menggunakan teks berformat Markdown untuk teks deskripsi.
Ekspor
Gunakan @export()
untuk berbagi jenis data yang ditentukan pengguna dengan file Bicep lainnya. Untuk informasi selengkapnya, lihat Mengekspor variabel, jenis, dan fungsi.
Batasan bilangan bulat
Anda dapat mengatur nilai minimum dan maksimum untuk jenis bilangan bulat. Anda dapat mengatur salah satu atau kedua batasan.
@minValue(1)
@maxValue(12)
type month int
Batasan panjang
Anda dapat menentukan panjang minimum dan maksimum untuk jenis string dan array. Anda dapat mengatur salah satu atau kedua batasan. Untuk string, panjangnya menunjukkan jumlah karakter. Untuk array, panjangnya menunjukkan jumlah item dalam array.
Contoh berikut mendeklarasikan dua jenis. Salah satu jenisnya adalah untuk nama akun penyimpanan yang harus memiliki 3 hingga 24 karakter. Jenis lainnya adalah array yang harus memiliki dari satu hingga lima item.
@minLength(3)
@maxLength(24)
type storageAccountName string
@minLength(1)
@maxLength(5)
type appNames array
Metadata
Jika Anda memiliki properti kustom yang ingin Anda terapkan ke jenis data yang ditentukan pengguna, tambahkan dekorator metadata. Dalam metadata, tentukan objek dengan nama dan nilai kustom. Objek yang Anda tentukan untuk metadata dapat berisi properti nama dan jenis apa pun.
Anda mungkin menggunakan dekorator ini untuk melacak informasi tentang jenis data yang tidak masuk akal untuk ditambahkan ke deskripsi.
@description('Configuration values that are applied when the application starts.')
@metadata({
source: 'database'
contact: 'Web team'
})
type settings object
Ketika Anda menyediakan @metadata()
dekorator dengan properti yang bertentangan dengan dekorator lain, dekorator itu selalu lebih diutamakan daripada apa pun di @metadata()
dekorator. Jadi, properti yang bertentangan dalam @metadata()
nilai berlebihan dan diganti. Untuk informasi selengkapnya, lihat Tidak ada metadata yang bertentangan.
Disegel
Lihat Meningkatkan tingkat kesalahan.
Jenis aman
Anda dapat menandai string atau jenis data yang ditentukan pengguna sebagai aman. Nilai jenis aman tidak disimpan ke riwayat penyebaran dan tidak dicatat.
@secure()
type demoPassword string
@secure()
type demoSecretObject object
Tingkatkan tingkat kesalahan
Secara default, mendeklarasikan jenis objek di Bicep memungkinkannya untuk menerima lebih banyak properti dari jenis apa pun. Misalnya, Bicep berikut valid tetapi menimbulkan peringatan [BCP089]: 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'
}
Peringatan memberi tahu Anda bahwa anObject
jenis tidak menyertakan properti bernama otionalProperty
. Meskipun tidak ada kesalahan yang terjadi selama penyebaran, kompilator Bicep mengasumsikan bahwa otionalProperty
itu adalah kesalahan ketik dan bahwa Anda bermaksud menggunakan optionalProperty
tetapi salah eja. Bicep memperingatkan Anda terhadap inkonsistensi.
Untuk meningkatkan peringatan ini ke kesalahan, terapkan @sealed()
dekorator ke jenis objek:
@sealed()
type anObject = {
property: string
optionalProperty?: string
}
Anda mendapatkan hasil yang sama dengan menerapkan @sealed()
dekorator ke param
deklarasi:
type anObject = {
property: string
optionalProperty: string?
}
@sealed()
param aParameter anObject = {
property: 'value'
otionalProperty: 'value'
}
Mesin penyebaran Azure Resource Manager juga memeriksa jenis yang disegel untuk properti lain. Menyediakan properti tambahan untuk parameter yang disegel menghasilkan kesalahan validasi, yang menyebabkan penyebaran gagal. Contohnya:
@sealed()
type anObject = {
property: string
}
param aParameter anObject = {
property: 'value'
optionalProperty: 'value'
}
Jenis data union bertag
Untuk mendeklarasikan jenis data gabungan yang ditandai kustom dalam file Bicep, Anda dapat menempatkan discriminator
dekorator di atas deklarasi jenis yang ditentukan pengguna. Bicep CLI versi 0.21.X atau yang lebih tinggi diperlukan untuk menggunakan dekorator ini. Contoh berikut menunjukkan cara mendeklarasikan jenis data serikat yang ditandai:
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
Untuk informasi selengkapnya, lihat Jenis data union yang ditandai kustom.
Konten terkait
Untuk daftar jenis data Bicep, lihat Jenis data.