【问题标题】:Typescript Array Map of Objects Producing No Unsafe Any ErrorTypescript Array Map of Objects 不产生不安全的任何错误
【发布时间】:2022-01-22 10:32:04
【问题描述】:

我正在一个新工作区中将我的 Angular 项目转换为 v13,当我移动代码时,我遇到了一个我没有答案的 typescript-eslint 错误。

之前的代码如下:

interface IConfigurationSetting {
  category?: string,
  key?: string,
  value?: string | number,
  message?: string
}

export class ConfigurationSetting implements IConfigurationSetting {
  category: string;
  key: string;
  value: string | number;
  message: string;

  constructor(options: IConfigurationSetting = {}) {
    this.category = options.category || '';
    this.key = options.key || '';
    this.value = options.value || '';
    this.message = options.message || '';
  }
}

export class ConfigurationSettingsGroup {
  settings: ConfigurationSetting[];
  errors: string[];

  constructor(options: {
    settings?: ConfigurationSetting[],
    errors?: string[]
  } = {}) {
    this.settings = (options.settings || []).map(setting => new ConfigurationSetting(setting));
    this.errors = options.errors || [];
  }
}

现在,当 VSC 上的 eslinter 完成时,它会在新的 ConfigurationSetting(setting) 调用中为设置参数产生错误 - “'any'类型的不安全参数分配给'IConfigurationSetting'类型的参数”。

我这样构建我的类是因为我想确保复杂对象或对象数组的属性已建立所有必要的默认值。我仍然可以映射上面的复杂对象数组吗?如果是这样,我该怎么做才能让它绕过这个不安全的规则而不完全禁用它?或者,现在有没有更好的方法来对复杂对象类型的属性映射数组?

更新:我做了一项更改,删除了分配给“IConfigurationSetting”类型参数的“any”类型的不安全参数错误:

this.settings = <ConfigurationSetting[]>(options.settings || []).map((setting: ConfigurationSetting) => new ConfigurationSetting(setting));

但我仍然收到 typescript-eslint 错误:

“any”类型值的不安全调用。 eslint(@typescript-eslint/no-unsafe-call)

此错误发生在 (options.settings || []).map。谁能帮我解决这个问题?

【问题讨论】:

    标签: arrays angular typescript eslint typescript-eslint


    【解决方案1】:

    您的 sn-p 上有一些隐式类型转换,这似乎是 linter 警告的内容。

    这些看起来像原因:

    constructor(options: IConfigurationSetting = {}) {
                                             //   ^ here, this has "any" type
    
    this.settings = (options.settings || []).ma...
                                      //  ^ here, this has "any[]" type
    

    你可以做一些转换来解决它:

    constructor(options: IConfigurationSetting = <IConfigurationSetting>{}) {
    ...
    
    this.settings = (options.settings || <ConfigurationSetting[]>[]).ma...
    

    【讨论】:

    • 我删除了我之前拥有的两个 cmets,并发布了我的代码更新。到目前为止,我的更新部分工作,因为我仍然收到“任何”错误的不安全调用。 option.settings || []) 实际上产生了 no-unncessary-type-assertion 的错误。
    • 这个关于不必要类型的警告取决于您如何配置 linter。我已将我的配置为需要它。在 ConfigurationSettingsGroup 的构造函数中,你还有一个 "= {}" 这是另一个 "any" 赋值
    猜你喜欢
    • 2020-12-22
    • 1970-01-01
    • 2022-11-14
    • 2022-01-14
    • 2023-02-02
    • 2020-10-10
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    相关资源
    最近更新 更多