Compartir vía


Regla linter: use el operador de acceso seguro.

Esta regla busca el uso de la función contains() para comprobar la existencia de propiedades antes del acceso y proporciona un reemplazo automático más sencillo. Sirve para recomendar e introducir a los usuarios una sintaxis equivalente simplificada sin introducir ningún cambio de código funcional. Para obtener más información, consulte Caja fuerte desreferenciar segura.

Los patrones específicos que busca son:

  • Operador ternario para comprobar el acceso a las propiedades:

    contains(<object>, '<property>') ? <object>.<property> : <default-value>
    

    Se sugiere el reemplazo siguiente:

    <object>.?<property> ?? <default-value>
    
  • Operador Ternary para comprobar si hay acceso a propiedades con nombre variable:

    contains(<object>, <property-name>) ? foo[<property-name>] : <default-value>
    

    Se sugiere el reemplazo siguiente:

    <object>[?<property-name>] ?? <default-value>
    

Código de regla de linter

Para personalizar la configuración de la regla, use el siguiente valor en el archivo de configuración de Bicep:

use-safe-access

Solución

Acepte la acción de código del editor para realizar automáticamente la refactorización.

Ejemplos

Acceso a propiedades con nombre

En el ejemplo siguiente se desencadena la regla:

param foo object
var test = contains(foo, 'bar') ? foo.bar : 'baz'

La aceptación de la acción de código da como resultado el siguiente Bicep:

param foo object
var test = foo.?bar ?? 'baz'

Acceso a la propiedad Variable

En el ejemplo siguiente se desencadena la regla:

param foo object
param target string
var test = contains(foo, target) ? foo[target] : 'baz'

La aceptación de la acción de código da como resultado el siguiente Bicep:

param foo object
param target string
var test = foo[?target] ?? 'baz'

Problemas irrelevantes

Los ejemplos siguientes no desencadenan la regla:

Diferencia entre la propiedad que se está comprobando y a la que se accede:

param foo object
var test = contains(foo, 'bar') ? foo.baz : 'baz'

Diferencia entre la propiedad variable que se está comprobando y a la que se accede:

param foo object
param target string
param notTarget string
var test = contains(foo, target) ? bar[notTarget] : 'baz'

Pasos siguientes

Para obtener más información acerca de linter, consulte Uso de linter de Bicep.