You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Azure SDK for JS更新存储账户NetworkRuleSet遇类型不匹配问题

解决Azure SDK for TypeScript更新存储账户NetworkRuleSet的类型不匹配问题

问题原因

你遇到的TypeScript编译错误:

error TS2345: Argument of type '{ networkRuleSet: { defaultAction: string; bypass: string; ipRules: { iPAddressOrRange: string; Action: string; }[]; }; }' is not assignable to parameter of type 'StorageAccountUpdateParameters'.
The types of 'networkRuleSet.defaultAction' are incompatible between these types.
Type 'string' is not assignable to type 'DefaultAction'.

根源有两点:

  1. 枚举类型不兼容:SDK定义的StorageAccountUpdateParameters中,networkRuleSet的defaultAction、bypass,以及ipRules中的action都是预定义的枚举类型,普通字符串字面量无法直接赋值给这些枚举类型。
  2. 属性名大小写错误:ipRules中的属性名应为小写的action,你写成了大写的Action,这也会导致类型匹配失败。

解决方案

1. 导入所需的枚举类型

从@azure/arm-storage中导入对应的枚举及参数类型,增强类型校验与提示:

  • DefaultAction:控制默认访问动作的枚举
  • Bypass:控制绕过规则的枚举
  • IPRuleAction:控制IP规则动作的枚举
  • StorageAccountUpdateParameters:更新存储账户的参数类型

2. 使用枚举值代替字符串字面量

将代码中的字符串替换为SDK提供的枚举值,同时修正属性名大小写。

修改后的完整代码

import { 
  NetworkRuleSet, 
  StorageAccount, 
  StorageManagementClient,
  DefaultAction,
  Bypass,
  IPRuleAction,
  StorageAccountUpdateParameters
} from '@azure/arm-storage';
import { DefaultAzureCredential } from '@azure/identity';
import { getSubscriptionId } from './environment-vars';

const subscriptionId = getSubscriptionId();
const credentials = new DefaultAzureCredential();
const storageManagement = new StorageManagementClient(
  credentials,
  subscriptionId
);

export const updateWhiteLists = async (
  resourceGroupName: string,
  storageAccountName: string,
): Promise<StorageAccount> => {

  console.log(`updateWhiteLists`);

  // 显式声明参数类型,提前发现类型错误
  const updateParameters: StorageAccountUpdateParameters = {
    networkRuleSet: {
      defaultAction: DefaultAction.Deny,
      bypass: Bypass.AzureServices,
      ipRules: [
        {
          iPAddressOrRange: "1.1.1.1/32",
          action: IPRuleAction.Allow // 修正为小写action
        },
      ],
    },
  }

  return await storageManagement.storageAccounts.update(
    resourceGroupName,
    storageAccountName,
    updateParameters
  );
};

额外说明

  • 使用枚举值可以确保传入的是SDK允许的合法值,避免拼写错误
  • 显式声明参数类型为StorageAccountUpdateParameters,能在开发阶段提前捕获类型不匹配问题
  • 若需动态生成枚举值(如从配置读取字符串),可使用类型断言(例如"Deny" as DefaultAction),但优先推荐使用枚举值保证类型安全

内容的提问来源于stack exchange,提问作者Silicium

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 07:53:23