TypeScript编程语言是JavaScript的超级,这是大家都共知的事情。那为什么是JavaScript的超级呢? 因为它既包含了JavaScript的语法和API,又包含类型编程。类型编程的目的,就是为了解决JavaScript弱类型问题。TypeScript本身的类型编程语法和Java非常相似。所以,Java开发的同学可以轻松进行TypeScript开发,而前端同学还是有一定的学习成本。
哪些是JavaScript编程,哪些是类型编程,个人以为梳理清楚这两个概念,对于初学TypeScript的同学还是很重要的。
TypeScript并没有对类型编程关于循环提供相关API,但是通过其他语法可以实现:
一、联合类型和extends结合
例如:
type union<T> = T extends string ? string : number
type Distribute = union<'hello' | 123>
结果是:
原因是union泛型传入的是联合类型'hello' | 123,类型 union里使用了extends,因此'hello' 和 123,分别参与extends运算,因此结果是两个两个类型的联合。其中,就隐藏了循环的运算。
二、对于映射类型循环遍历
通过type和interface都可以定义映射类型,如何对这两种类型的属性进行遍历呢?代码如下:
interface Person {
name: string
say(msg: string): void
updatePart(newName: string): void
}
type FnKeys<T> = {
[key in keyof T]: T[key] extends Function ? key : never
}[keyof T]
type fnKeys = FnKeys<Person>
结果如下:
[key in keyof T] 包含了对对象的属性遍历。keyof是获取对象的键值的联合类型。in运算符进行迭代遍历。类似JavaScript中的for... in ...
题记:不能一味强记知识,通过对知识汇总和梳理,通过现象查看本质,才能更好理解,更容易记忆。