Bicep 展开运算符

展开运算符用于将可迭代数组或对象展开为单个元素。 使用展开运算符,你可以通过将数组或对象的元素或属性展开为新的数组或对象来轻松操作数组或对象。

Spread

...

展开运算符用于将属性从一个对象复制到另一个对象,或者以简洁易读的方式合并数组和对象。

示例

以下示例显示了对象中使用的展开运算符:

var objA = { color: 'white' }
output objB object = { shape: 'circle', ...objA } 

示例中的输出:

名称 类型
objB 对象 (object) { shape: 'circle', color: 'white' }

以下示例显示了数组中使用的展开运算符:

var arrA = [ 2, 3 ]
output arrB array = [ 1, ...arrA, 4 ] 

示例中的输出:

名称 类型
arrB 数组 [ 1, 2, 3, 4 ]

以下示例显示了在单个运算中多次使用展开运算符:

var arrA = [ 2, 3 ]
output arrC array = [ 1, ...arrA, 4, ...arrA ] 

示例中的输出:

名称 类型
arrC 数组 [ 1, 2, 3, 4, 2, 3 ]

以下示例显示了在多行运算中使用展开运算符:

var objA = { color: 'white' }
var objB = { shape: 'circle'}
output objCombined object = { 
  ...objA 
  ...objB
} 

在此用法中,两行之间不使用逗号。 示例中的输出:

名称 类型
objCombined 对象 (object) { color: 'white', shape: 'circle' }

展开运算可用于避免设置可选属性。 在以下示例中,仅当参数层不是空字符串时,才会设置 accessTier

param location string = resourceGroup().location
param tier string = 'Hot'

var storageAccountName = uniqueString(resourceGroup().id)
var accessTier = tier != '' ? {accessTier: tier} : {}

resource mystorage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    ...accessTier
  } 
}

前面的示例也可以写成:

param location string = resourceGroup().location
param tier string = 'Hot'

var storageAccountName = uniqueString(resourceGroup().id)

resource mystorage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: storageAccountName
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    ...(tier != '' ? {accesssTier: tier} : {})
  } 
}

扩张运算符可用于替代现有属性。

param location string = resourceGroup().location
param storageProperties {
  accessTier: string?
}

resource mystorage 'Microsoft.Storage/storageAccounts@2023-05-01' = {
  name: uniqueString(resourceGroup().id)
  location: location
  sku: {
    name: 'Standard_LRS'
  }
  kind: 'StorageV2'
  properties: {
    accessTier: 'Cold'
    ...storageProperties
  }
}

后续步骤