前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TypeScript系列教程九《类型转换》-- keyof和typeof 操作

TypeScript系列教程九《类型转换》-- keyof和typeof 操作

作者头像
星宇大前端
发布2021-08-05 16:16:07
1.5K0
发布2021-08-05 16:16:07
举报
文章被收录于专栏:大宇笔记大宇笔记

类型转换是TS最好玩也是语言的灵魂,想玩好需要熟练各种手段和工具,下面一一介绍类型转换的一些常用手段。

keyof 操作


keyof 见名知其意,就是获取对象所有的key,然后返回一个新的联合类型。

例如:

代码语言:javascript
复制
type Point = { x: number; y: number };
type P = keyof Point;

扩展用途,将属性类型由number 修改成string:

代码语言:javascript
复制
type SPoint = {[K in P]:string}

如果一个类型由stringnumber索引签名,keyof 会返回这些类型代替。

代码语言:javascript
复制
type Arrayish = { [n: number]: unknown };
type A = keyof Arrayish;
//A的类型是number
代码语言:javascript
复制
type Mapish = { [k: string]: boolean };
type M = keyof Mapish;
//type M = string | number

typeof 操作


之前JS早就存在typeof,typeof可以获取对象类型

代码语言:javascript
复制
// Prints "string"
console.log(typeof "Hello world");

TS可以根据typeof 根据上下文推断出类型:

在这里插入图片描述
在这里插入图片描述

&nsbp;

typeof对于类型不是很有用,但与其他类型运算符结合使用,可以使用typeof方便地表示许多模式。例如,让我们从查看预定义的类型ReturnType开始。它接受函数类型并生成其返回类型:

代码语言:javascript
复制
type Predicate = (x: unknown) => boolean;
type K = ReturnType<Predicate>;
    
//type K = boolean

如果使用ReturnType 在函数身上,会报错:

代码语言:javascript
复制
function f() {
  return { x: 10, y: 3 };
}
type P = ReturnType<f>;
//'f' refers to a value, but is being used as a type here. Did you mean 'typeof f'?

这时候可以配合typeof使用

代码语言:javascript
复制
function f() {
  return { x: 10, y: 3 };
}
type P = ReturnType<typeof f>;
    
//type P = {
    //x: number;
    //y: number;
//}

类型检测

TS会协助检测typeof 错误

代码语言:javascript
复制
function func1(params:string) {
  
}

// Meant to use = ReturnType<typeof msgbox>
let shouldContinue: typeof func1("Are you sure you want to continue?");

//',' expected.ts(1005)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-08-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • keyof 操作
  • typeof 操作
    • 类型检测
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档