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

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 != '' ? {accesssTier: 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