TypeScript 开发实战
梁宵
搜狗营销事业部高级架构师
34174 人已学习
新⼈⾸单¥59
课程目录
已完结/共 47 讲
TypeScript 开发实战
登录|注册
留言
16
收藏
沉浸
阅读
分享
手机端
回顶部
当前播放: 12 | 类与接口的关系
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 | 结课测试&结束语
本节摘要
登录 后留言

全部留言(16)

  • 最新
  • 精选
极客时间
现在有这么一个问题,继承有私有属性和保护属性的类的接口用在什么地方呢? 首先根据课程中描述的这个接口不仅抽象了类的公共属性还抽象了其私有属性和受保护属性。 根据课程代码显示,这个接口只能在定义这个类的子类的时候才能使用。到目前为止的理解,定义子类继承父类的时候加不加这个接口好像都没啥影响,或者加不加有什么不同吗?这个继承有私有属性和保护属性的类的接口还能用在什么地方呢?

作者回复: 举个例子:一个UI类库定义了一个Button类并提供了ButtonInterface接口。现在你想实现一个自己的Button类,添加些自定义属性,那么只能是Button的子类去实现ButtonInterface接口,其他的类不能实现这个接口,即使与Button具有相同的成员。 这种接口的存在,对子类起到了约束作用,保证了继承关系。

2019-07-28
2
22
Sixty
老师,我怎么觉得抽象类和接口有点类似啊,我可以用接口来一定一种类的类型,我也可以用抽象类来定义一种类的内部结构。怎么来理解他们以及什么时候使用接口什么时候使用抽象类呢。

作者回复: 首先,在抽象类中可以包含方法的实现,也可以只声明不实现;而在接口中只能声明方法,不包含实现。 另外,抽象类侧重类别的抽象(定义这个对象是什么,比如:人类可以是男人的抽象类),而接口侧重功能的抽象(定义这个对象能做什么,比如:人可以吃喝跑跳)。

2019-12-17
3
10
我爱学习
class Control { private state: any; } interface SelectableControl extends Control { select(): void; } class Button extends Control implements SelectableControl { select() { } } http://www.typescriptlang.org/docs/handbook/interfaces.html 页面拉到最下面,有这样一句话 “Within the Control class it is possible to access the state private member through an instance of SelectableControl. ”说在 Control 类内部,是允许通过 SelectableControl 的实例来访问私有成员 state 的。 但是 SelectableControl 是个接口,SelectableControl 的实例是指 Control 类的子类实例吗,但是私有属性应该只有 Control 实例才能访问的,那句话应该怎么理解

作者回复: 我同样觉得这句话有问题,我想这一段文字要传达的意思是,如果Control没有私有成员,实现SelectableControl的类可以是任何类;但Control有了私有成员,这个类就只能是Control的子类(Button)。记住这点就行了。

2020-02-11
2
5
一路向北
class Auto{ state = 1; private state2 = 0; protected state3 = 3; } interface AutoInterface extends Auto{} class Bus extends Auto implements AutoInterface{ showMsg(){ // console.log(this.state2); // 不能访问来自接口的私有属性 console.log(this.state3); // 可以访问来自接口的被保护属性 } } let bus = new Bus(); bus.showMsg(); console.log(bus); // 输出可以看到state2属性和state3属性 视频中说,接口可以抽离Auto类中的私有属性,但是Bus类却无法访问到,怎么解释呢?

作者回复: 可以这样理解: Bus也具有Auto的私有属性,但在子类中访问父类的私有属性,显然是不能通过语法检查的,所以会报错。 所以只能在Bus的实例上体现,只不过这个例子不能修改这个属性。 看下面的例子,理解一下: class Auto { private length: number; constructor(length: number) { this.length = length; } } interface AutoInterface extends Auto {} class Bus extends Auto implements AutoInterface {} let bus = new Bus(10); console.log(bus); // Bus {length: 10}

2019-09-04
3
Geek_29429b
所以接口继承类时,不应该继承带有私有属性和受保护成员的类,否则这个接口就不能实现除了 这个类的子类 外,别的类了,是这个意思吗?

作者回复: 这个意思是对的,但不存在应该不应该的问题,要看具体的目的是什么。(另外,接口是被类实现的,而不是实现类)

2019-07-25
2
3
刘玉文
ts中的类和接口的关系好奇怪,java里面接口是不能继承类的,ts中可以,为啥这样定义,完全仿java不好嘛

作者回复: 考虑这种场景:接口 IButton 继承了类 Button(含私有成员),那么 IButton 只能被 Button 或 Button 的子类实现。 假设 IconButton、TextButton 都是 Button 的子类,那么它们都可以实现 IButton 的结构。 但如果有另一个类 Text,它与 Button 毫不相干,就不能随意实现 IButton。

2020-07-22
2
阿兰得华
老师,父类的private属性不能被子类继承?为什么Class Bus extends Auto Implements AutoInterface不报错呢?

作者回复: 关键在怎么理解“AutoInterface 继承了 Auto 后,也包括了其中的私有和受保护成员”。注意,这么做的目的是限定接口的使用范围,并不会真正为这个接口添加类的私有和受保护属性(实际上接口也没有这种类型的属性),而这个限定范围就是:只能由子类来实现这个接口。

2019-08-27
2
何用
最后那张图,中间的箭头标错了吧?

作者回复: 你可能是按照书写代码的顺序理解箭头的。 PPT中间的剪头表示接口可以由类来实现,类可以由接口来继承,理解这个就行了。

2019-07-26
2
hao-kuai
1.更期望看到的是官方文档没有的东西,有编程基础的人跟着文档敲一遍类似的效果 2.看完或者敲完之后没什么效果,更需要的是知道这种机制可以用来解决什么问题(例如类之间的继承可以用来解决代码复用),同样的问题有其他的解决方案吗(例如代码复用还可以用组合来解决) 3.跟随大牛的脚步是为了比官方资料更高效学习,比如摒弃一些貌似高深其实鸡肋的东西,比如分享官方文档没有的使用经验,结合实际案例加深理解(如果后续视频有相关内容请指出,直接观看学习)
2020-08-26
20
小团
最后总结的时候,老师您说接口可以抽离出类的成员,这个抽离不太懂,你想说的是继承吧?类与接口的关系无非就是继承与实现,怎么突然来个抽离,希望话术能始终保持统一,这样也便于理解
2020-08-27
1
6
收起评论