【问题解答】在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: “打杂”,

};

你可能感兴趣的:(Web前端,经验分享,前端,前端框架)