木灵鱼儿
阅读:201
最后更新:2023/02/10/ 0:42:49
类型守卫:判断某个key是某个对象的合法key值
/** 类型守卫:key是否是指定对象的属性 */
function isLanguageKey(key: string, object: Object): key is keyof typeof object {
return Object.prototype.hasOwnProperty.call(object, key);
}
这个一般用于对象object是其他人提供的,但是我们知道它一定会有某个key值,但是由于这个object它被类型推断为已知key的类型,比如:
{
title: "xxx",
age: "xxx"
}
当我们使用一个string
类型的key去获取它的值的时候,注意是string类型,就会得到一个any的返回值,事实上这个key就是tiltle或者age,但是ts无法正确推断出来这个值,因为key不是具体的title
或者age
,而是一个广泛的string
类型的key。
所以我们通过一个方法去判断这个key是否是属于这个对象的,然后再函数的返回类型里使用is
去判断一个变量是否是后面的类型(keyof typeof object
)。
is一般用在函数的返回值那块。
typeof可以自动拿到object
形参的类型,通过keyof
拿到类型的所有key。
文章分类
TypeScript
版权申明
本文系作者 @木灵鱼儿 原创发布在木灵鱼儿 - 有梦就能远航站点。未经许可,禁止转载。
相关推荐
ts实战:给没有类型声明的第三方库编写一个类型声明文件
前情提要在github找了一个原生代码写的Toast库,安装后发现没有ts类型声明,通过安装@types/库名 也没有现成的对应的类型声明库,于是想着自己写一份声明文件用,也是第一次,所以找了好些教程,这里做个笔记。npm仓库: Toastify说实话这个库不太行,不支持多个toast,权当练手了。类型声明文件在项目中,比如我是在src目录下创建一个types目录,专门存放这些类型声明文件,创建一个名为Toastify.d.ts的文件。内容如下:declare module "toastify" { /** toast定位 */ export type Toa...
