5个非常有用的TypeScript Typeof操作符技巧

b07f871ef18f1dd414d353ff35ebea84.png

前端Q

我是winty,专注分享前端知识和各类前端资源,乐于分享各种有趣的事,关注我,一起做个有趣的人~

公众号

点击上方 前端Q,关注公众号

回复加群,加入前端Q技术交流群

掌握5个TypeScript typeof操作符技巧,让你的代码更简洁。

在JavaScript中,你可以通过 typeof 操作符获得变量的类型,那么你知道TypeScript中使用的 typeof 操作符是什么吗? 在本文中,我将介绍5种常见的typeof操作符的应用场景,您可以在以后的项目中使用。

1. 获取对象的类型

e65deaf7f3d0691d4302398bf68a3aa4.jpeg

 man 对象是一个普通的JavaScript对象,在TypeScript中你可以使用type或interface来定义对象的类型。有了这个对象类型,你就可以使用TypeScript内置的工具类型,比如Partial、Required、Pick或Readonly来处理对象类型,以满足不同的需求。

对于简单的对象,这可能不是什么大问题。但是对于具有更深嵌套层次的大型复杂对象,手动定义它们的类型可能会让人感到头脑麻木。要解决这个问题,可以使用typeof操作符。

type Person = typeof man;
type Address = Person["address"];

与之前手动定义类型相比,使用typeof操作符要容易得多。 Person["address"] 是一个索引访问类型,用于查找另一个类型(Person类型)上的特定属性(address)。

2. 获取将所有枚举键表示为字符串的类型

在TypeScript中,枚举类型是被编译成常规JavaScript对象的特殊类型:

f64c068eb1c050edc62bbb22246d490a.jpeg

因此,也可以对枚举类型使用 typeof 操作符。但这通常没有太多实际用途,当处理枚举类型时,它通常与 keyof 操作符结合使用:

ca20b2019c70ef7044583d7db0c9a734.jpeg

3. 获取函数对象的类型

还有另一种更常见的场景,在工作中使用typeof操作符。在获得相应的函数类型之后,你可以继续使用TypeScript内置的ReturnType和Parameters实用工具类型来分别获得函数的返回值类型和参数类型。

d582fe7654fc12cab98a613dd225970f.jpeg

4. 获取类对象的类型

既然 typeof 操作符可以处理函数对象,那么它是不是也可以处理类对象呢。答案是肯定的。

ba071a53a52267604648b08e88fe8c48.jpeg

在上面的代码中, createPoint 是一个工厂函数,它创建Point类的一个实例。通过typeof运算符,可以获得Point类相应的构造签名,从而实现相应的类型验证。在定义Constructor的形参类型时,如果未使用typeof操作符,将出现以下错误消息:

57ff4a85fb5746a647b6e0a61bf9b816.jpeg

5. 获得更精确的类型

当使用 typeof 操作符时,如果你想获得更精确的类型,那么你可以将它与TypeScript 3.4版中引入的const断言结合使用。它的用法如下。

0683c034496f2aaad1f3762f9da9b886.jpeg

从上图可以看出,在使用const断言后,再使用typeof操作符,我们可以获得更精确的类型。

ad6da7e13a4f89b668bbf1fb82ac8dcc.png

往期推荐

ES6的一些高级技巧

b369efaf6b379808d2c818d687dba780.png

反思我这五六年来写过的烂代码

7d7b90f30d78476e4794a1ef61efeee5.png

探索npm run dev的运行逻辑

e4c56ad89e414c1045fe9051310c5063.png


最后

  • 欢迎加我微信,拉你进技术群,长期交流学习...

  • 欢迎关注「前端Q」,认真学前端,做个专业的技术人...

5b778cf2a125031ff0eb80a251bc480f.png

前端Q

本公众号主要分享一些技术圈(前端圈为主)相关的技术文章、工具资源、学习资料、招聘信息及其他有趣的东西...

公众号

052807652bd90f59dfca83078915bb61.jpeg

f3b15b4c778429a4da4248bac0e8bc42.png

点个在看支持我吧

ee8e6f25e5ee2718d4dd916e0f584a62.gif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值