迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > TypeScript >

在 TypeScript 中按值获取对象的键

作者:迹忆客 最近更新:2022/11/05 浏览次数:

要在 TypeScript 中按值获取对象的键:

  1. 使用 Object.keys() 方法获取对象键的数组。
  2. 键入数组作为对象键的数组。
  3. 使用 find() 方法通过值获取键。
const obj = {
  name: 'Tom',
  department: 'accounting',
  country: 'Chile',
};

// ✅ Using Object.keys()
const result1 = (Object.keys(obj) as (keyof typeof obj)[]).find((key) => {
  return obj[key] === 'accounting';
});

console.log(result1); // 👉️ "department"

// ✅ Using Object.entries()
let result2 = '';

Object.entries(obj).find(([key, value]) => {
  if (value === 'accounting') {
    result2 = key;
    return true;
  }

  return false;
});

console.log(result2); // 👉️ "department"

TypeScript 中按值获取对象的键

代码片段中的两个示例都按值获取对象的键。

我们在第一个示例中使用了 Object.keys 方法。 该方法返回对象键的数组。

const obj = {
  name: 'Tom',
  department: 'accounting',
  country: 'Chile',
};

// 👇️ const r: string[]
const r = Object.keys(obj);
console.log(r); // 👉️ ['name', 'department', 'country']

但是,请注意 TypeScript 将 Object.keys() 方法的返回值类型为 string[]

对象的所有键都是字符串,但并非所有字符串都是对象中的键,因此我们无法直接通过键访问值。

const obj = {
  name: 'Tom',
  department: 'accounting',
  country: 'Chile',
};

// 👇️ const r: string[]
const r = Object.keys(obj).find((key) => {
  // ⛔️ Error:  No index signature with a parameter of
  // type 'string' was found on type
  // '{ name: string; department: string; country: string; }'.
  return obj[key] === 'accounting';
});

typescript 按值获取对象的键 error

TypeScript 告诉我们不能用任何字符串键索引对象,它必须是 namedepartmentcountry

这就是我们使用类型断言来键入 Object.keys() 方法的返回值的原因。

const obj = {
  name: 'Tom',
  department: 'accounting',
  country: 'Chile',
};

// now the `key` parameter is typed as
// 👇️ (parameter) key: "name" | "department" | "country"
const result1 = (Object.keys(obj) as (keyof typeof obj)[]).find((key) => {
  return obj[key] === 'accounting';
});

console.log(result1); // 👉️ "department"

现在 find 方法中的 key 参数是对象键的联合类型,所以一切都按预期工作。

我们传递给 Array.find 方法的函数被键数组中的每个元素调用,直到它返回一个真值或遍历整个数组。

如果满足条件,则 find() 方法返回相应的数组元素并短路。

如果条件永远不满足,find() 返回 undefined

我们还可以使用 Object.entries() 方法通过值获取对象的键。

const obj = {
  name: 'Tom',
  department: 'accounting',
  country: 'Chile',
};

let result2 = '';

Object.entries(obj).find(([key, value]) => {
  if (value === 'accounting') {
    result2 = key;
    return true;
  }

  return false;
});

console.log(result2); // 👉️ "department"

请注意 ,在使用这种方法时,我们不必使用类型断言。

Object.entries() 方法返回一个键值对数组。

const obj = {
  name: 'Tom',
  department: 'accounting',
  country: 'Chile',
};

// 👇️ const r: [string, string][]
const r = Object.entries(obj);

// 👇️ [['name', 'Tom'], ['department', 'accounting'], ['country', 'Chile']]
console.log(r);

typescript Object entries 方法

这很有用,因为我们不必使用类型断言,因为我们得到了一个由 2 个元素组成的数组 - 键和值。

find() 方法返回满足条件的数组元素或未定义的值,我们只需要键,因此更简单:

  1. 在方法之外初始化一个变量
  2. 满足条件后设置其值
  3. 短路

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 TypeScript 中返回一个 Promise

发布时间:2023/03/19 浏览次数:182 分类:TypeScript

本教程讨论如何在 TypeScript 中返回正确的 Promise。这将提供 TypeScript 中 Returns Promise 的完整编码示例,并完整演示每个步骤。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便