iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >怎么在TypeScript中正确的遍历一个对象
  • 345
分享到

怎么在TypeScript中正确的遍历一个对象

2023-06-29 17:06:11 345人浏览 薄情痞子
摘要

这篇文章主要介绍了怎么在typescript中正确的遍历一个对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么在TypeScript中正确的遍历一个对象文章都会有所收获,下面我们一起来看看吧。javascr

这篇文章主要介绍了怎么在typescript中正确的遍历一个对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么在TypeScript中正确的遍历一个对象文章都会有所收获,下面我们一起来看看吧。

    javascript

    在讲解用 Ts 遍历一个对象之前, 我们先说说 在 js 中怎么实现, for...in、Object.keys, 一个简单的例子:

    // for...inconst obj = {  name: 'itsuki',  address: 'hangzhou',};for (const key in obj) {  console.log(key, obj[key].toUpperCase());}// Object.keysObject.keys(obj).forEach(key => {  console.log(key, obj[key].toUpperCase());});// 输出// name ITSUKI// address HANGZHOU

    TypeScript

    for...in

    但是在 TypeScript 中, 如果你直接这么用的话, 发现会报错.

    type Person = {  name: string;  address: string;};const obj: Person = {  name: 'itsuki',  address: 'hangzhou',};function print(obj: Person) {  for (const key in obj) {    // ❌    // key:string 不能分配给 { name:string; age:number }类型    console.log(key, obj[key].toUpperCase());  }}print(obj)

    我们知道for...in、Object.keys拿到的是对象的 key, 而在对象中所有的 key 都是字符串, 所以它无法分配给Person的name、address.

    但是我们可以keyof来解决这个问题.

    function print(obj:Person){  let key: keyof Person;  for (key in obj) {    // ✅    console.log(key, obj[key].toUpperCase());  }}

    Object.keys

    在使用Object.keys时, 我们可以使用as运算符来解决.

    function print(obj: Person) {  Object.keys(obj).forEach((k) => {    // ✅    console.log(k, obj[k as keyof Person].toUpperCase());  });}

    我们可以把这个抽离出一个函数:

    function geTKEys<T>(obj: T) {  return Object.keys(obj) as Array<keyof T>;}getKeys(obj); // (keyof Person)[]

    Object.entries

    我们也可以使用Object.entries()来遍历对象.

    Object.entries(obj).forEach(([k, v]) => {  console.log(k, v);});

    思考

    以下是我自己的思考, 如有错误, 请指正

    我想Object.keys()返回的是一个string[], 是因为它是在运行时确定的, 我们知道TypeScript做的只是静态类型的检查, 即使我们使用keyof Person返回了 name | address, 但是我们不能肯定在运行时它就是这两个字段.

    比如说:

    const obj2 = {  name: 'itsuki',  address: 'hangzhou',  age: 20,};print(obj2)// 编译时: ✅, 因为它有name、address属性// 运行时: ❌, 因为age字段是number, 没有toUpperCase方法

    然后我在 GitHub issue 里面找到这一句话:

    TS 中的类型是开放式的。因此, keysof 可能会少于在运行时获得的所有属性。

    它更要我明白了, 为什么keys()返回的是一个string[], 而不是一个(keyof Person)[].

    关于“怎么在TypeScript中正确的遍历一个对象”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“怎么在TypeScript中正确的遍历一个对象”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注编程网精选频道。

    --结束END--

    本文标题: 怎么在TypeScript中正确的遍历一个对象

    本文链接: https://www.lsjlt.com/news/325862.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • 怎么在TypeScript中正确的遍历一个对象
      这篇文章主要介绍了怎么在TypeScript中正确的遍历一个对象的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么在TypeScript中正确的遍历一个对象文章都会有所收获,下面我们一起来看看吧。JavaScr...
      99+
      2023-06-29
    • 如何在TypeScript中正确的遍历一个对象
      目录JavaScriptTypeScriptfor...inObject.keysObject.entries思考总结JavaScript 在讲解用 Ts 遍历一个对象之前, 我们先...
      99+
      2024-04-02
    • 怎么在php中遍历对象
      这篇文章将为大家详细讲解有关怎么在php中遍历对象,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。PHP开发环境搭建工具有哪些一、phpStudy,是一个新手入门最常用的开发环境。二、Wamp...
      99+
      2023-06-14
    • 怎么解决TypeScript遍历对象属性的问题
      这篇文章主要讲解了“怎么解决TypeScript遍历对象属性的问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决TypeScript遍历对象属性的问题”吧!一、问题  比如下面的代码...
      99+
      2023-06-25
    • 怎么在JavaScript中遍历对象属性
      本篇文章为大家展示了怎么在JavaScript中遍历对象属性,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称为Java...
      99+
      2023-06-14
    • 怎么在php中使用foreach遍历类对象
      怎么在php中使用foreach遍历类对象?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。php有什么特点1、执行速度快。2、具有很好的开放性和可扩展性。3、PHP支持多种主...
      99+
      2023-06-14
    • es6怎么遍历对象中的keys和value
      ES6提供了多种遍历对象的方法。其中,遍历对象的keys和value可以使用`for...of`循环和`Object.entries...
      99+
      2023-10-26
      es6
    • jquery中怎么遍历对象和数组
      jquery中怎么遍历对象和数组,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。JS forEach方法arr[].forEach(functi...
      99+
      2024-04-02
    • 怎么在jquery中使用$.each()遍历对象和数组
      怎么在jquery中使用$.each()遍历对象和数组?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。jquery是什么jquery是一个简洁而快速的JavaScript库,...
      99+
      2023-06-14
    • es6中map对象的遍历方法是什么
      这篇“es6中map对象的遍历方法是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“es...
      99+
      2024-04-02
    • 怎么在Java中实现一个分页遍历功能
      怎么在Java中实现一个分页遍历功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 数据查询模拟首先mock一个分页获取数据的逻辑,直接随机生成数据,并且控制最多返回三页pub...
      99+
      2023-06-06
    • 怎么在java中创建一个对象
      这篇文章给大家介绍怎么在java中创建一个对象,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java可以用来干什么Java主要应用于:1. web开发;2. Android开发;3. 客户端开发;4. 网页开发;5. ...
      99+
      2023-06-14
    • Python中怎么正确实现一个算法
      本篇文章给大家分享的是有关Python中怎么正确实现一个算法,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Python算法具体操作代码示例:# -*- co...
      99+
      2023-06-17
    • 怎么在java中创建一个对象数组
      这篇文章给大家介绍怎么在java中创建一个对象数组,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Java的优点是什么1. 简单,只需理解基本的概念,就可以编写适合于各种情况的应用程序;2. 面向对象;3. 分布性,Ja...
      99+
      2023-06-14
    • Java中对象打包的正确方式是什么?
      Java是一门面向对象的编程语言,在Java中,对象是非常重要的概念。对象的创建和管理对于Java程序的运行效率和稳定性有着至关重要的影响。在Java中,对象的打包也是非常重要的一部分,本篇文章将会介绍Java中对象打包的正确方式。 什么是...
      99+
      2023-07-23
      打包 接口 对象
    • 在Struts2中怎么利用ognl对数组进行遍历
      本篇文章为大家展示了在Struts2中怎么利用ognl对数组进行遍历,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、简介<s:iterator />可以遍历数据栈里面的任何数组,集合等...
      99+
      2023-05-31
      struts2 ognl
    • 怎么在python中使用items()函数遍历键值对
      本篇文章给大家分享的是有关怎么在python中使用items()函数遍历键值对,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Python主要用来做什么Python主要应用于:1...
      99+
      2023-06-14
    • C#中怎么实现一个二叉树遍历算法
      这篇文章给大家介绍C#中怎么实现一个二叉树遍历算法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。C#算法实现了二叉树的定义,怎么构造一颗已知的二叉树,用几种常规的算法(先序,中序,后序,层次)进行C#二叉树遍历。希望能...
      99+
      2023-06-18
    • 怎么在Go中遍历通道中的元素
      在Go中遍历通道中的元素可以使用range关键字来实现。下面是一个示例代码: package main import ( &qu...
      99+
      2024-04-02
    • 如何在 Go 代码中正确地加载对象?这里有一份教程
      Go 语言是一种简洁、高效、高并发的编程语言,这种语言在 Web 服务器、云计算、容器化等领域得到了广泛的应用。在编写 Go 代码时,我们经常需要加载和使用各种对象,例如配置文件、JSON 数据、XML 文件等。但是,如果我们在加载对象时...
      99+
      2023-08-22
      对象 load 教程
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作