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
}
相关推荐
可乐ea11 分钟前
多模型编排的三层:框架、模型路由与提供商路由
前端·网络·人工智能·ai智能体·多智能体协作·多模型编排·大模型路由
青柠之夏cc2 小时前
前端拖拽功能原生实现,不引入拖拽库完成业务
开发语言·前端·python
liangshanbo12152 小时前
前端大文件切片上传怎么做?
前端
Sand(ContextGate)3 小时前
Python Agent 测试实战:测试与评估,让 Agent 像传统软件一样可交付
前端·javascript·python·microsoft·ai
广州华水科技3 小时前
单北斗GNSS变形监测系统在城市安全与地质灾害中的应用前景
前端
颜进强3 小时前
20 · NestJs循环依赖与 forwardRef:容器为什么在环面前会死,"占位再补齐"怎么救
前端·后端·ai编程
颜进强3 小时前
19 · NestJs @Global 落地账:装饰器与 `isGlobal` 参数,各在什么场景上岗
前端·后端·ai编程
码艺-Alimjan3 小时前
Tauri 网站To桌面应用实战总结
前端·javascript·vue
颜进强4 小时前
18 · NestJS动态模块与 forRoot:`imports: [ConfigModule.forRoot({...})]` 到底在 import 什么
前端·后端·ai编程
YZ1225524 小时前
【Docker专题】使用Docker部署Vue-Flask项目前后端分离版【前端Docker部署】
前端·vue.js·docker