【问题解答】在TypeScript中keyof怎么理解

元素隐式具有 “any” 类型,因为类型为 “string” 的表达式不能用于索引类型 “{ name: string; age: number; job: string; }”。

在类型 “{ name: string; age: number; job: string; }” 上找不到具有类型为 “string” 的参数的索引签名。

出现错误后,百度查了结果,根据网上的结果,加了一个判断,之后就不报错了,网上判断代码如下

function isValidKey(

key: string | number | symbol,

object: 《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】 object

): key is keyof typeof object {

return key in object;

}

并且,这段代码也不知道是什么意思,希望能帮忙解答一下;

[](()解答

============================================================

首先,keyof这是一个关键字,它在Typescript中代表遍历的意思,不过遍历的是类型,直接看个例子吧

function getUserInfo(key: string) {

const User = {

name: “oliver”,

age: 18,

job: “打杂”,

};

return User[key];

}

const info = getUserInfo(“name”);

console.log(info);

这个代码,抛开TypeScript的部分,只看代码逻辑,应该是没有问题的,我们定义了一个函数,函数根据传入的key返回这个key对应的value值,但是,这里存在一个问题,就是我们输入的key是不可控的,例子中输入的name,在User中是存在的,假如我们输入的是sex,比如:

const info = getUserInfo(“sex”);

console.log(info);

那么此时的Info结果会是undefined,因为在User上是不存在sex这个属性,很显然,这种不可控的因素有点违反了TypeScript的规则,我们实际上希望的是输入的key一定是User上存在的,对于不存在的就要报错,到这里keyof的作用就体现出来了,先看个改写后的例子:

interface User {

name: string;

age: number;

job: string;

}

function getUserInfo(key: T): User[T] {

const User = {

name: “oliver”,

age: 18,

job: “打杂”,

};

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值