首页
首页
沸点
课程
直播
活动
竞赛
商城
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
Typescript
清沫
创建于2021-05-15
订阅专栏
学习Typescript
等 15 人订阅
共24篇文章
创建于2021-05-15
订阅专栏
默认顺序
默认顺序
最早发布
最新发布
玩转TS类型体操
TS 因其强大的类型系统在前端领域可谓是大战拳脚。并且 TS 的类型系统是图灵完备的,这意味着它是可以用来进行逻辑运算,也就是我们戏称的类型体操😂。因此,我们通常可以在一些库中看到极其复杂的类型定义。
一起读透TS装饰器
装饰器是 JS stage-2 的一个提案,并作为 TS 的实验特性存在。如果你有使用过 Spring 的经验,相信你一定对其中强大的注解能力印象深刻,借助装饰器强大元编程能力也可以在做到类似的功能。
内置工具类型 -- Typescript类型编程篇(5)
可以看到,Omit类型就是对之前提到的Pick和Exclude的进一步封装。 可以看到T被约束必须为函数类型,如果传入一个非函数类型会报错。 T同样被约束必须为函数类型。 T被约束为必须为构造函数。 T同样被约束为必须为构造函数。 ThisParameterType用于获取函数…
条件类型 -- Typescript类型编程篇(4)
条件类型是ts中非常强大的功能,形如:T extends U ? X : Y,表示如果T是U的子类,则返回类型为X,否则为Y。和三元表达式相似。 条件类型还有一个特性:分布式条件类型。在结合联合类型使用时(只针对extends左边的联合类型),分布式条件类型会被自动分发成联合类…
映射类型 -- Typescript类型编程篇(3)
ts提供了映射类型,用于重用和修改已存在的类型。 假如我们有一个Person接口,我们希望把Person内部所有的成员都变成可选。在不借助映射类型时,我们可以会这样做: 这样既繁琐,也没有做到类型复用。而借助映射类型: 映射类型使用形如[K in KEYS]的形式遍历类型中所有…
重用现有类型 -- Typescript类型编程篇(2)
如果我们又想使用friends中的对象,我们可能又需要再单独抽离一个类型。这种方式就显得比较繁琐。 number并不是唯一可用于获取数组子项类型的方式。还可以使用诸如0,1或者其他数值字面量。 key in的方式和我们编程中获取对象中属性的方式十分相似。但ts只支持数组形式获取…
获取变量类型 -- Typescript类型编程篇(1)
typeof对于已经存在的变量,可以通过typeof获取其类型(注意和js中typeof做区分):获取函数类型:获取类的构造器和静态成员类型:
类型保护 -- Typescript基础篇(16)
如果我们有一个变量a,它的类型是联合类型string | number,我们希望调用slice方法。但是slice方法只存在于string类型中。所以我们需要缩小a的类型范围到string才能使用slice方法,否则会报错。这就是类型保护。 我们定义了两个接口,但是我们在做类型…
类型兼容性 -- Typescript基础篇(15)
我们为不同的变量定义了类型,所以不能像js一样,为一个变量自由赋值。类型兼容性就是描述一个类型能否被赋值为其他类型。兼容的本质是保证变量被赋值为其他类型的值,该变量在后续过程中仍能正常使用。 但是ts还有很多更为复杂的类型,本节主要讲讲各种类型的兼容性。 ts的类型兼容都是基于…
协变和逆变 -- Typescript拓展篇(1)
协变和逆变是编程理论中一个很重要的话题。用于表达父类子类在安全类型转换后的兼容性(或者说继承关系)。定义为:如果A,B代表两个类型;f()表示类型转换;A -> B表示A是B的子类。 我们有名为Animial的父类,Cat是Animal的子类。WhiteCat是Cat的子类, …
类型断言 -- Typescript基础篇(14)
虽然ts会自动推断类型,但是它所推断出的结果可能并不是我们期望的,此时我们可以使用类型断言覆盖它的推断。 注意:类型断言并不是类型转换,类型断言只是用于编译时进行类型分析。 这种方式极具破坏性,因为a并没有name属性,运行时会报错。一定要慎用双重断言! 为什么有些断言能成功,…
类型推断 -- Typescript基础篇(13)
我们并不总是需要为变量指定具体的类型,ts会根据一些规则推断变量类型。 因为const 指定的变量表示是常量,不可变。所以ts能在基础类型的基础上进一步推断出更具体的类型,这个和字面量类型相似。而let指定的变量是可变类型,所以只能推断出基础类型。 此时ts会将它推断为(str…
声明合并 -- Typescript基础篇(12)
在之前的函数章节中,通过声明多个函数类型实现函数的重载。函数重载就是函数声明合并。除了函数声明合并外。ts还会将接口和枚举声明进行合并。 接口的函数成员在重载时,在同一个声明中的顺序保持不变;但后声明的函数顺序会在先声明的函数之上,即后声明函数的有更高的优先级。(如上面合并结果…
泛型 -- Typescript基础篇(11)
我们在定义类型时,除了要给类型具体的规范和约束外,另一个重要考量是能否方便的复用。 可以看出这两个方法实现代码其实是一模一样的,唯一的区别是参数和返回值的类型不同。当然,为了消除这种重复,我们可以把参数和返回值类型改为any,但这样会失去类型保护;或者我们也可以用联合类型,结合…
类与接口 -- Typescript基础篇(10)
接口除了能够对对象属性就行规范,也能够对类的行为进行抽象,即类可以继承接口;反之接口也可以继承类。需要注意的是:在类继承接口时,接口只规定了类的实例公有部分;在接口继承类时,继承类的所有实例部分。 在上例中,ColorPoint继承Point接口。注意:类继承接口使用的是imp…
类 -- Typescript基础篇(9)
js并不同于传统面向对象的语言,它使用构造函数和原型链实现面向对象编程。而且并没有真正的类的概念,即使ES6新增了class关键字,它本质也是语法糖。 但是通过使用class能增加代码语义性。并且ts对class提供了诸多功能,使得我们能够更像其他面向对象的语言一样使用clas…
字面量类型 -- Typescript基础篇(8)
除了可以用interface或者enum等定义不同的类型名字,还可以使用type为类型命名。
联合类型,交叉类型 -- Typescript基础篇(7)
如果我们希望变量具有多种类型,如变量可以是number也可以是string,则可用联合类型实现。各个类型之间用|分隔: 此时的val就是一个联合类型的变量,为它赋值数值或者字符串都合法。 至于怎么确定具体的类型,类型保护章节对此有更详细的说明。 多个对象使用交叉类型时,得到的结…
枚举类型 -- Typescript基础篇(6)
枚举也是十分常见的类型。该类型的变量只能取限制范围内的值。如一年的月份只能取一月到十二月。 可以看出,枚举被编译后是一个对象,具备由枚举成员,和枚举成员的值所组成的双向映射。所以当我们访问Direction.Up时得到的值是0,而访问Direction[0]时得到的值是Up。 …
函数类型 -- Typescript基础篇(5)
函数作为js一等公民,在js中占有重要地位。ts为函数添加了额外的功能,使之更容易被使用。 在ts中函数类型声明有两种方式:函数声明和函数表达式(与js一致)。不同是需要指定参数和返回值的类型。 在函数表示式指定类型后,ts会自动推断实际参数的x和y的类型是number,返回值…
下一页