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
}
相关推荐
weixin_427771613 小时前
css font-size 的妙用
前端·css
凤凰战士芭比Q4 小时前
web中间件——Nginx
前端·nginx·中间件
一 乐4 小时前
点餐|智能点餐系统|基于java+ Springboot的动端的点餐系统小程序(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·小程序·论文
bitbitDown5 小时前
从零打造一个 Vite 脚手架工具:比你想象的简单多了
前端·javascript·面试
liangshanbo12155 小时前
CSS 数学函数完全指南:从基础计算到高级动画
前端·css
码上成长6 小时前
GraphQL:让前端自己决定要什么数据
前端·后端·graphql
冴羽6 小时前
为什么在 JavaScript 中 NaN !== NaN?背后藏着 40 年的技术故事
前端·javascript·node.js
久爱@勿忘7 小时前
vue下载项目内静态文件
前端·javascript·vue.js
前端炒粉7 小时前
21.搜索二维矩阵 II
前端·javascript·算法·矩阵
合作小小程序员小小店7 小时前
web网页开发,在线%台球俱乐部管理%系统,基于Idea,html,css,jQuery,jsp,java,ssm,mysql。
java·前端·jdk·intellij-idea·jquery·web