如何从TypeScript中的类型化对象中动态删除键

anny123

如何动态地从键入的对象中删除键?

例如,我的界面QUERY_PARAMS是:

export interface QUERY_PARAMS {
  query: string;
  min_height?: string;
  max_height?: string;
  min_width?: string;
  max_width?: string;
  color?: string;
  image_type?: IMAGETYPE;
  order?: ORDER;
  orientation?: ORIENTATION;
}

我尝试动态删除密钥的代码:

  async getAllImages(inputParams: QUERY_PARAMS) {
     for (let key in inputParams) {
       if (!inputParams[key]) {
         delete inputParams[key]
       }
     }
     // ...
  }

它引发错误:

元素隐式地具有“ any”类型,因为类型“ string”的表达式不能用于索引类型“ QUERY_PARAMS”。在类型“ QUERY_PARAMS”上找不到参数类型为“字符串”的索引签名

萨帕卡

错误是因为key是一个字符串,它不够具体,无法成为的属性inputParams,即keyof QUERY_PARAMS当前,TS不允许您为for循环的迭代变量类型#3500定义类型,但是您可以对循环内的键进行类型声明:

export interface QUERY_PARAMS {
  query: string;
  min_height?: string;
  // ...
}

async function getAllImages(inputParams: QUERY_PARAMS) {
  for (let key in inputParams) {
    const k = key as keyof QUERY_PARAMS; // <-- type assertion
    if (!inputParams[k]) {
      delete inputParams[k]
    }
  }

  // ...
}

const p: QUERY_PARAMS = {
  query: 's',
  min_height: undefined,
}

console.log(p); // { query: 's', min_height: undefined }

getAllImages(p);

console.log(p); // { query: 's' }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何删除 Typescript 对象中的未知键

如何在 TypeScript 中定义带有动态键的对象类型?

在 Typescript 中删除对象键并返回条件类型

TypeScript:从类型/减法类型中删除键

如何从类型化对象的键中获取索引类型?

如何计算打字稿中对象的动态键类型

如何从Typescript中的固定对象的键创建映射类型

使用动态键在 Typescript 中动态创建对象,无需将类型扩展为 { [key: string]: T }

从对象数组中删除动态键

Typescript中的对象索引键类型

Typescript中的动态键

如何访问对象数组中的动态键

TypeScript中的动态类型

如何在TypeScript中删除对象数组中具有空值的键?

如何仅收集类型中的键,该类型的对象具有某些特定键作为 Typescript 接口中的值?

如何从JSON文件中删除键/对象?

如何从JavaScript对象中删除键?

如何深入删除对象中的键?

如何删除CKRecord中的键和对象?

如何从对象数组中删除键

如何删除数组中对象的键

从无限的json对象中动态删除节点(键)

如何从打字稿中的动态键数组推断类型化数组?

如何在TypeScript中从地图的自定义键类型获取对象?

如何检查强类型对象是否在TypeScript中包含给定键而不抱怨?

typescript如何从类型中解开/删除Promise?

来自Typescript中对象的键和值的类型

TypeScript中是否可以直接从对象的键创建新类型?

在TypeScript中按值类型排除对象键