我的编程空间,编程开发者的网络收藏夹
学习永远不晚

在Typescript中如何使用for...in详解

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

在Typescript中如何使用for...in详解

如何在Typescript中使用for...in ?本人在TS中用for...in出现了些问题,也想到了一些解决方法。那么先来看看下面报错的代码吧。

interface ABC {
    a: string
    b: string
}
const x: ABC = {
    a:'1',
    b:'2'
}
const y: ABC = {
    a:'3',
    b:'4'
}
for (const key in x) {
// 在类型 "ABC" 上找不到具有类型为 "string" 的参数的索引签名。ts(7053)
    x[key] = y[key]
}

这由于在for...in循环时,也会遍历继承的属性,所以不能判断key的类型,只能是string类型。如果用Object的hasOwnProperty方法呢,然而并没有用,TS还是认为key是string类型。这时候需要自己封装一下hasOwnProperty方法。

function hasOwnProperty<T, K extends PropertyKey>(
    obj: T,
    prop: K
): obj is T & Record<K, unknown> {
    return Object.prototype.hasOwnProperty.call(obj, prop);
}
for (const key in x) { 
    if (hasOwnProperty(y,key) && hasOwnProperty(x,key)) {
        x[key] = y[key]
        //可以看到let x: ABC & Record<string, unknown>
        //x的类型变异了
    } 
}

这样就好了,这可也实在是太麻烦了。我只是遍历一个简单对象,为何要搞得这么麻烦,当然还是有简单方法的。只要循环的时候这样写就好了。

let key:keyof ABC
for (key in x) {
    x[key] = y[key]
}

是不是很简单,然而当我把接口ABC的a类型改成number的时候,ts又报错了。

//不能将类型“string | number”分配给类型“never”。
//不能将类型“string”分配给类型“never”。ts(2322)

WTF,为啥x[key]类型变成never了?因为在赋值的时候,x[key]有两种类型的可能,永远不可能赋值它两个类型,所以是never?(个人猜想)。如果用之前那种方法也是报一样的错误。由于never是TS中最底层的类型,never 仅能被赋值给另外一个 never 类型,所以x[key]不能被赋值了。 这可怎么办呢,没办法了,只能使用最后的方法了!

let key:keyof ABC
//@ts-ignore
for (key in x) {
    x[key] = y[key]
}

补充:TypeScript中使用for...in遍历对象属性会报错的解决办法

最近有一个用ts写的react项目,在里面使用for…in遍历对象属性时报了个错,类似下面这种:
解决办法:在 tsconfig.json 文件中加入下面被注释掉的那一行代码,即把 抑制隐式索引错误 置为真

"compilerOptions": {
    "target": "esnext",
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    // "suppressImplicitAnyIndexErrors": true,
    "importHelpers": true,
    "jsx": "react-jsx",
    "esModuleInterop": true,
    "sourceMap": true,
    "baseUrl": "./",
    "strict": true,
    "paths": {
      "@/*": ["class="lazy" data-src/*"],
      "@@/*": ["class="lazy" data-src/.umi/*"]
    },
    "allowSyntheticDefaultImports": true
  },

总结

到此这篇关于在Typescript中如何使用for...in的文章就介绍到这了,更多相关Typescript中使用for...in内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

在Typescript中如何使用for...in详解

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

下载Word文档

猜你喜欢

python中for x in range如何使用

这篇文章给大家介绍python中for x in range如何使用,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python主要用来做什么Python主要应用于:1、Web开发;2、数据科学研究;3、网络爬虫;4、嵌
2023-06-15

怎么在python中使用for…in循环

这期内容当中小编将会给大家带来有关怎么在python中使用for…in循环,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python
2023-06-14

TypeScript在vue中的使用解读

这篇文章主要介绍了TypeScript在vue中的使用方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-02-08

如何在TypeScript使用模块化以及注意事项详解

在TypeScript中就像在EC5中一样,任何包含顶级import或export的文件都被认为是一个模块,下面这篇文章主要给大家介绍了关于如何在TypeScript使用模块化以及注意事项的相关资料,需要的朋友可以参考下
2022-11-13

Laravel中如何使用Typescript

本篇内容介绍了“Laravel中如何使用Typescript”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!为什么使用 TypeScriptT
2023-07-04

Vue3中如何使用TypeScript

这篇文章主要介绍“Vue3中如何使用TypeScript”,在日常操作中,相信很多人在Vue3中如何使用TypeScript问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue3中如何使用TypeScript
2023-07-06

如何在Vue3.0 项目中使用TypeScript 和 Vite

如何在Vue3.0 项目中使用TypeScript 和 Vite?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Vue的优点Vue具体轻量级框架、简单易学、双向数据绑定、组件
2023-06-06

TypeScript中泛型的使用详细讲解

泛型程序设计(genericprogramming)是程序设计语言的一种风格或范式,下面这篇文章主要给大家介绍了关于TypeScript中泛型使用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
2022-11-13

详解如何在Remix中使用tailwindcss

这篇文章主要为大家介绍了如何在Remix中使用tailwindcss方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-19

如何在Shell中使用for循环

本篇文章给大家分享的是有关如何在Shell中使用for循环,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。第一类:数字性循环for1-1.sh#!/bin/bash for((
2023-06-09

如何使用TypeScript类型注解

小编给大家分享一下如何使用TypeScript类型注解,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!类型注解TypeScript提供了很多数据类型,通过类型对变量进行限制,称之为类型注解,使用类型注解后,就不能够随意变更变
2023-06-29

编程热搜

目录