我是靠谱客的博主 和谐树叶,最近开发中收集的这篇文章主要介绍TypeScript系列教程九《类型转换》-- keyof和typeof 操作,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

keyof 操作


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

例如:

type Point = { x: number; y: number };
type P = keyof Point;

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

type SPoint = {[K in P]:string}

 

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

type Arrayish = { [n: number]: unknown };
type A = keyof Arrayish;
//A的类型是number
type Mapish = { [k: string]: boolean };
type M = keyof Mapish;
//type M = string | number

typeof 操作


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

// Prints "string"
console.log(typeof "Hello world");

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

在这里插入图片描述

&nsbp;

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

type Predicate = (x: unknown) => boolean;
type K = ReturnType<Predicate>;
    
//type K = boolean

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

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使用

function f() {
  return { x: 10, y: 3 };
}
type P = ReturnType<typeof f>;
    
//type P = {
    //x: number;
    //y: number;
//}

类型检测

TS会协助检测typeof 错误

function func1(params:string) {
  
}

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

//',' expected.ts(1005)

最后

以上就是和谐树叶为你收集整理的TypeScript系列教程九《类型转换》-- keyof和typeof 操作的全部内容,希望文章能够帮你解决TypeScript系列教程九《类型转换》-- keyof和typeof 操作所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部