keyof和in和typeof

keyof

keyof后面跟接口,表示遍历接口的这些的属性名(实际上一个键值对就是冒号前面的这些)。keyof表示索引查询,可以用于获取接口类型的所有键,其返回类型是联合类型。

js 复制代码
interface People {
  name:string;
  age:number;
}
// type类型别名:pType的类型表示"name"|"age"
// 键名以字符串形式存储,所以遍历出的接口属性名都是字符串,就是常量
type pType = keyof People;
// 编译报错,p1的值只能是字符串name和age
let p1:pType = 2
let p2:pType = "xxx"

当需要type pType = keyof People;的类型也可以是其他字符串的做法如下:

js 复制代码
interface People {
  name:string;
  age:number;
  // 表示属性名是数字number类型,遍历后是变量number
  [idx:number]:number|string;
  // 表示属性名是字符串string类型,遍历后是变量string
  [idx:string]:number|string;
}
// 类型别名:pType的类型表示"name"|"age"|number|string
type pType = keyof People;
let p1:pType = 6;
let p2:pType = "xxx"

in

in用于取联合类型的值。主要用于数组和对象的构造。

js 复制代码
type name = 'firstName' | 'lastName';
type TName = {
  [key in name]: string;
};

typeof

TS中,typeof操作符可以用来获取一个变量或对象的类型。

js 复制代码
// 提取变量
let str = "267";
type StrType = typeof str; // string
// 编译报错
let a:StrType = 267;
// 提取对象 (包含对象的所有属性且属性值类型要一样)
let obj = {
  name: 530,
  age: "418",
  height: 816
}
type withJ = typeof obj;
// 编译报错
let obj1:withJ ={
  
}
// 编译报错
let obj2:withJ = {
  width:267
}
相关推荐
林恒smileZAZ8 分钟前
`Array(100).map(() => 1)` 为什么全为空?
前端·javascript
小巧的砖头29 分钟前
C#会重蹈覆辙吗?系列之2:反射及元数据的性能问题
开发语言·前端·c#
KaMeidebaby36 分钟前
卡梅德生物技术快报|蛋白的叠氮基修饰:实操解析:核酸模板耦合蛋白的叠氮基修饰实现靶蛋白定点共价标记
前端·人工智能·物联网·算法·百度
濮水大叔1 小时前
在大型 Vue 项目中,如何有效管理复杂的状态?“散装版” vs “套装版”
前端·vue.js·typescript
玄星啊1 小时前
可修改:代码的生存底线
前端·ai编程
没落英雄1 小时前
3. DeepAgents 实战 - Memory Skills 与上下文工程
前端·人工智能·架构
Bigger2 小时前
对不起!我错怪你了,UnoCSS:一次和 AI 一起排查 DevTools 卡顿的经历
前端·css·人工智能
laowang3572 小时前
依赖故障时,日志体系需要埋哪些关键节点才能快速定位是安装失败、解析失败还是运行时缺失?
前端·javascript·vue.js·webpack·node.js
倾颜2 小时前
AI Mind 的单线程短期记忆设计:如何压缩、整理并控制当前会话上下文
前端·langchain·llm
u0143781083 小时前
行内块元素之间的空白
前端·html