typescript的基本结构_面向Type编程 -- Typescript类型和类型操作(一)

本文探讨了Typescript中的类型操作符typeof和keyof。typeof用于获取变量的声明类型或推断类型,尤其在处理对象字面量时展现出独特功能。keyof则用于获取类型的所有键,形成联合类型,可用于操作类、接口及基本数据类型,并能与typeof结合使用,提供类型映射。通过理解并熟练掌握这些类型操作,可以深入理解Typescript的面向Type编程核心。
摘要由CSDN通过智能技术生成

2a913f84b57d18d870254f077bf3e252.png

简述

Typescript发展至今,已经成为大型项目标配。其提供的静态类型系统,大大增强了代码的可读性以及可维护性。尽管如此,在很多开发者意识里,依然认为Typescript仅仅是javascript的超集,或者有类型限制的javascript。这样描述本身并没有错,但未能触及Typescript的核心。Typescript的核心是类型(Type)以及类型操作。只有认识和熟练掌握了类型操作,能够像操作语言一样操作类型,才算真正窥探Typescript的内在意义。

从认识类型操作符开始

面向Type编程是一个伪概念,软件工程中不存在这种概念。为了提高对Type以及Type oprator的关注度,我刻意创造出来的一个不规范名词。引导大家从了解和掌握类型操作角度,去重新认识Typescript编程。

Typescript中有很多类型操作符,例如用来声明类型和接口的type和interface;还有关键字typeof、keyof、in、extends、infer;以及()、[]、{}、=、<>、:、;、?、&、|等界限符。下面我们一起来初步认识一下这些熟悉而又陌生的类型操作符,这里我们主要讨论关键字操作符。

特别说明,文章需要一定Typescript基础知识。如果你对typescript语言比较陌生,建议先去了解一下Typescript语言的基本知识,再来一起讨论这个话题。

一、 typeof操作符

1. js表达式中typeof用来返回一个变量的基本数据类型

,如'string'、'number'、'function'、'object'

typeof 1 // 'number'
typeof true // boolean
typeof 'hello world' // 'string'
typeof function(){} // 'function'
typeof {} // 'object'
typeof [] // 'object'
typeof null // 'object'
typeof undefined // 'undefined'
typeof new RegExp() // 'object'
typeof Symbol() // symbol

2. 在Typescript中,typeof可以获取变量的声明类型

typeof在typescript中还可以用来返回一个变量的声明类型,如果不存在,则获取该类型的推论类型。typeof在上下文中的作用决定了返回值是什么。是类型查询?还是表达式?前者是返回类型(types),而后者返回类型值(values)。例如,console.log、if判断、变量声明let,var等操作中typeof返回变量的类型的字符串名称,而type关键字限制下,typeof返回变量的类型

例如:

let n: number = 1
type TN = typeof n

/** 等同于
 * TN == number
 */

let s:string = 'hello world'
type TS = typeof s

/** 等同于
 * TS == string
 */

let a: Array<number> = []
type TA = typeof a

/** 等同于
 * TA == number[]
 */

let sy: Symbol = Symbol()
type TSY = typeof sy

/** 等同于
 * TSY == Symbol
 */

这里有一点需要说明,不能单纯的通过关键字,判断typeof在上下文中的作用。而是综合的来判断是属于表达式还是类型查询。比如,下面例子中,虽然出现了let关键字,但是很明显typeof出现在类型定声明的位置上,因此这里是类型查询,typeof s返回s2的声明类型string

let s2: string = 'hello'
let s3: typeof s = 'wo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值