Compartir a través de


Operador de propagación de Bicep

El operador de propagación se usa para expandir una matriz o objeto iterable en elementos individuales. El operador de propagación permite manipular fácilmente matrices u objetos mediante la propagación de sus elementos o propiedades en nuevas matrices o objetos.

Spread

...

El operador de propagación se usa para copiar propiedades de un objeto a otro o para combinar matrices y objetos de forma concisa y legible.

Ejemplos

En el siguiente ejemplo se muestra el operador de propagación usado en un objeto :

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

Salida del ejemplo:

Nombre Tipo Valor
objB objeto { forma: 'circle', color: 'white' }

En el siguiente ejemplo se muestra el operador de propagación usado en una matriz:

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

Salida del ejemplo:

Nombre Tipo Value
arrB array [ 1, 2, 3, 4 ]

En el siguiente ejemplo se muestra la propagación usada varias veces en una sola operación:

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

Salida del ejemplo:

Nombre Tipo Value
arrC array [ 1, 2, 3, 4, 2, 3 ]

En el siguiente ejemplo se muestra la propagación usada en una operación de varias líneas:

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

En este uso, la coma no se usa entre las dos líneas. Salida del ejemplo:

Nombre Tipo Valor
objCombined objeto { color: 'blanco', forma: 'circle' }

En el ejemplo siguiente se muestra cómo agregar condicionalmente un elemento de matriz:

@allowed(['white', 'black'])
param color string = 'black'

var colorWhite = { color: 'white' }
var colorBlack = { color: 'black' }

output objB object = ((color == 'white')? { shape: 'circle', ...colorWhite} : { shape: 'circle', ...colorBlack})

Salida del ejemplo:

Nombre Tipo Valor
objB objeto { forma: 'circle', color: 'black' }

La operación de propagación se puede usar para evitar establecer una propiedad opcional. En el ejemplo siguiente, accessTier solo se establece si el parámetro nivel no es una cadena vacía.

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
  } 
}

El ejemplo anterior también se puede escribir como:

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 != '' ? {accessTier: tier} : {})
  } 
}

El operador de propagación se puede usar para invalidar las propiedades existentes.

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
  }
}

Pasos siguientes