在 TypeScript 中按值获取对象的键
要在 TypeScript 中按值获取对象的键:
-
使用
Object.keys()
方法获取对象键的数组。 - 键入数组作为对象键的数组。
-
使用
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"
代码片段中的两个示例都按值获取对象的键。
我们在第一个示例中使用了 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 告诉我们不能用任何字符串键索引对象,它必须是 name 、department 或 country。
这就是我们使用类型断言来键入 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);
这很有用,因为我们不必使用类型断言,因为我们得到了一个由 2 个元素组成的数组 - 键和值。
find()
方法返回满足条件的数组元素或未定义的值,我们只需要键,因此更简单:
- 在方法之外初始化一个变量
- 满足条件后设置其值
- 短路
相关文章
在 AngularJs 中设置 Select From Typescript 的默认选项值
发布时间:2023/04/14 浏览次数:78 分类:Angular
-
本教程提供了在 AngularJs 中从 TypeScript 中设置 HTML 标记选择的默认选项的解释性解决方案。
在 Angular 中使用 TypeScript 的 getElementById 替换
发布时间:2023/04/14 浏览次数:153 分类:Angular
-
本教程指南提供了有关使用 TypeScript 在 Angular 中替换 document.getElementById 的简要说明。这也提供了在 Angular 中 getElementById 的最佳方法。
在 TypeScript 中使用 try..catch..finally 处理异常
发布时间:2023/03/19 浏览次数:181 分类:TypeScript
-
本文详细介绍了如何在 TypeScript 中使用 try..catch..finally 进行异常处理,并附有示例。
在 TypeScript 中使用 declare 关键字
发布时间:2023/03/19 浏览次数:97 分类:TypeScript
-
本教程指南通过特定的实现和编码示例深入了解了 TypeScript 中 declare 关键字的用途。
在 TypeScript 中 get 和 set
发布时间:2023/03/19 浏览次数:172 分类:TypeScript
-
本篇文章演示了类的 get 和 set 属性以及如何在 TypeScript 中实现它。
在 TypeScript 中格式化日期和时间
发布时间:2023/03/19 浏览次数:161 分类:TypeScript
-
本教程介绍内置对象 Date() 并讨论在 Typescript 中获取、设置和格式化日期和时间的各种方法。
在 TypeScript 中返回一个 Promise
发布时间:2023/03/19 浏览次数:182 分类:TypeScript
-
本教程讨论如何在 TypeScript 中返回正确的 Promise。这将提供 TypeScript 中 Returns Promise 的完整编码示例,并完整演示每个步骤。
在 TypeScript 中定义函数回调的类型
发布时间:2023/03/19 浏览次数:221 分类:TypeScript
-
本教程说明了在 TypeScript 中为函数回调定义类型的解决方案。为了程序员的方便和方便,实施了不同的编码实践指南。
在 TypeScript 中把 JSON 对象转换为一个类
发布时间:2023/03/19 浏览次数:110 分类:TypeScript
-
本教程演示了如何将 JSON 对象转换为 TypeScript 中的类。