TypeScript 开发实战
梁宵
搜狗营销事业部高级架构师
34174 人已学习
新⼈⾸单¥59
课程目录
已完结/共 47 讲
TypeScript 开发实战
登录|注册
留言
12
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 11 | 类(2):抽象类与多态
00:00 / 00:00
高清
  • 高清
1.0x
  • 2.0x
  • 1.5x
  • 1.25x
  • 1.0x
  • 0.75x
  • 0.5x
网页全屏
全屏
00:00
付费课程,可试看
01 | 重塑“类型思维”
02 | 类型基础(1):强类型与弱类型
03 | 类型基础(2):动态类型与静态类型
04 | 编写你的第一个TypeScript程序
05 | 基本类型
06 | 枚举类型
07 | 接口(1):对象类型接口
08 | 接口(2):函数类型接口
09 | 函数相关知识点梳理
10 | 类(1):继承和成员修饰符
11 | 类(2):抽象类与多态
12 | 类与接口的关系
13 | 泛型(1):泛型函数与泛型接口
14 | 泛型(2):泛型类与泛型约束
15 | 类型检查机制(1):类型推断
16 | 类型检查机制(2):类型兼容性
17 | 类型检查机制(3):类型保护
18 | 高级类型(1):交叉类型与联合类型
19 | 高级类型(2):索引类型
20 | 高级类型(3):映射类型
21 | 高级类型(4):条件类型
22 | ES6与CommonJS的模块系统
23 | 使用命名空间
24 | 理解声明合并
25 | 如何编写声明文件
26 | 配置tsconfig.json(1):文件选项
27 | 配置tsconfig.json(2):编译选项
28 | 配置tsconfig.json(3):工程引用
29 | 编译工具:从ts-loader到Babel
30 | 代码检查工具:从TSLint到ESLint
31 | 使用Jest进行单元测试
32 | 创建项目
33 | 组件与类型(1):函数组件与类组件
34 | 组件与类型(2):高阶组件与Hooks
35 | 事件处理与数据请求
36 | 列表渲染与路由
37 | Redux与类型
38 | 搭建服务端开发环境
39 | 列表的CRUD
40 | 导出Excel
41 | 搭建Vue开发环境
42 | 组件封装
43 | 组件发布
44 | 共存策略
45 | 宽松策略
46 | 严格策略
47 | 结课测试&结束语
本节摘要
登录 后留言

全部留言(12)

  • 最新
  • 精选
极客时间
这里有不明白的地方:let animals: Animal[] = [dog, cat] 这句代码有疑惑,我的理解是animals是一个数组类型,数组的每一项应该是一个Animal类,但是数组的每一项确是Animal的实例对象,这个咋么理解呢? Animal类型包括Animal的实例吗? 感觉前面视频没有看到这种用法,是我忽略了,还是这是一种特别的写法呢?

作者回复: 实例的类型就是类的类型,因为它具备类的必要属性。

2019-07-28
3
7
皮皮大神
老师,最后的this,难道不是原型链吗,在myflow中找不到step方法,去原型中查找,myflow继承自flow

作者回复: 对,本质上就是原型链查找

2019-09-11
3
安冬
老师,关于 this 的多态,您在视频中提到「 this 既可以是父类型,也可以是子类型 」,但后来做的实验发现返回的好像都是子类型 MyFlow,和父类 WorkFlow 无关。该怎么理解这样的输出结果呢? 实验如下: ```typescript class WorkFlow { step1() { return this; } step2() { return this; } } class MyFlow extends WorkFlow { next() { return this; } } let this1: WorkFlow = new MyFlow().next().step1().next().step2(); let this2: WorkFlow = new MyFlow().next().step1(); let this3: WorkFlow = new MyFlow().step1(); console.log( this1 ); // MyFlow{} console.log( this2 ); // MyFlow{} console.log( this3 ); // MyFlow{} ``` 控制台中的运行结果都是这样的—— MyFlow{ __proto__: WorkFlow { constructor: f MyFlow() next: f() __proto__: { step1: f () step2: f () constructor: f WorkFlow() __proto__: Object } } }

作者回复: MyFlow 是 Workflow的子类,所以它们的类型是兼容的,也可以看成等价,就是不做区分。

2019-08-20
3
1
lf
class WorkFlow { add() { console.log('git add') return this } commit() { console.log('git commit') return this } } let workFlow = new WorkFlow() // 方法的链式调用 console.log(workFlow.add().commit(), 'workFlow.add().commit()') class MyFlow extends WorkFlow{ next() { console.log('class MyFlow extends WorkFlow next') return this } } let myFlow = new MyFlow() console.log(myFlow.next(), 'workFlow.add().commit()') console.log(new MyFlow.next(), 'workFlow.add().commit()') 最后一行编辑器报错Property 'next' does not exist on type 'typeof MyFlow,为什么,少了什么吗

作者回复: new MyFlow().next(),少了括号

2019-11-14
🐳李小博🐳
public: 所有人可见 private: 只能类本身使用,实例和子类不可调用,构造函数加private,表明这个类不能被实例化,也不能被继承 protected: 只能在类和子类中调用,实例中不能调用,构造函数protected,相当于基类,只能继承不能实例化 readonly:只读属性,不能被更改。类,子类,实例都可以调用 static:静态属性,可以继承,类和子类可以调用,实例不能调用,
2020-04-09
4
Angus
一个抽象类,在一个类前加protected的类有什么区别吗?看起来都像是个基类。
2021-11-08
3
Hello
抽象类: 只能被继承不能实例化 抽象类中抽象方法: 可在不同子类中实现类的多态 类方法返回this: 类实例可链式调用类中方法,包括子类和父类中方法
2020-03-29
2
Geek_2ca471
最后那个this不是既可以是父类型也可以是子类型,而是子类型的链式调用。 因为new出来的是子类实例,子类实例调用的函数里面的this肯定还是子类实例
2023-05-23
日月土申·风
代码坏味道之一就是链式调用😂😂😂
2022-05-14
Cris
抽象类:只能被继承不能被实例化的类 抽象方法:在父类中定义(不能实现),在子类中实现(必须实现)。抽象方法可以用来提取事物的共性也可以实现多态(所谓的多态就是在父类中定义,在子类中实现,不同的子类可以有不同的实现)。
2021-07-01
收起评论