前几天面试的时候,被问到一道题,没回答出来,卡在了对TypeScript中的keyof、in操作符不熟悉的原因下。
而后面复盘的时候,我多次去TypeScript的官网查看关于keyof、in操作符相关资料,一直没有找到,后面才反应过来,我看的是中文版TypeScript的官网,而不是真正的TypeScript的官网,而中文版TypeScript的官网信息更新早已停滞了,这。。。,技术更新的太快了,不学习真的要落后啊!!!
然后就果断翻看了TypeScript的真正的官网:https://www.typescriptlang.org/
初步是了解的差不多了,所以就写文章记录下,当然了如果本文说的有错的地方,请大家指教,谢谢。
keyof
就跟它的名字意思差不多,取的是对象中的key值,有点像JavaScript中的Object.keys
方法,不过这个keyof不能用于取enum(枚举)
类型的key,我就犯了这样的基本用法错。
相关用法案例,如下
interface IPerson { name: string; age: number; gender: string; } type P = keyof IPerson; // "name" | "age" | "gender"
更多代码实例大家可以到官方这里查看:https://www.typescriptlang.org/docs/handbook/2/keyof-types.html
in
in用于取联合类型的值。主要用于数组和对象的构造。
type name = 'firstName' | 'lastName'; type TName = { [key in name]: string; };//{firstName:string,lastName:string}
关于这个in的操作符,我没不到专门介绍这个in操作符的章节,找到是一个叫Mapped Types与之有关联的,而且这个in大多数情况下会跟keyof搭配使用,具体的大家可以看官方的实例:https://www.typescriptlang.org/docs/handbook/2/mapped-types.html
参考文档
https://www.cnblogs.com/plBlog/p/15562806.html
https://pjchender.blogspot.com/2021/08/typescript-mapped-type.html