转载地址

TypeScript基础入门 - 接口 - 继承接口

项目实践仓库

https://github.com/durban89/typescript_demo.git
tag: 1.0.13

为了保证后面的学习演示需要安装下ts-node,这样后面的每个操作都能直接运行看到输出的结果。

npm install -D ts-node

后面自己在练习的时候可以这样使用

npx ts-node src/learn_basic_types.ts
npx ts-node 脚本路径

接口

TypeScript的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。 在TypeScript里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。

继承接口

和类一样,接口也可以相互继承。 这让我们能够从一个接口里复制成员到另一个接口里,可以更灵活地将接口分割到可重用的模块里。如下实例演示

interface Shape {color: string;
}interface Square extends Shape {sideLength: number;
}let square = <Square> {};
square.color = 'red'
square.sideLength = 10;

一个接口可以继承多个接口,创建出多个接口的合成接口。如下实例演示

interface Shape {color: string;
}interface PenStroke {penWidth: number;
}interface Square extends Shape, PenStroke {sideLength: number;
}let square = <Square> {};
square.color = 'red'
square.sideLength = 10;
square.penWidth = 10;

混合类型

先前我们提过,接口能够描述JavaScript里丰富的类型。 因为JavaScript其动态灵活的特点,有时你会希望一个对象可以同时具有上面提到的多种类型。一个例子就是,一个对象可以同时做为函数和对象使用,并带有额外的属性。

interface Counter {(start: number): stringinterval: number;reset(): void;
}function getCounter(): Counter {let counter = <Counter>function(start: number) {};counter.interval = 10;counter.reset = function() {}return counter;
}let counter = getCounter()
counter(10);
counter.reset();
counter.interval = 10.0

在使用JavaScript第三方库的时候,你可能需要像上面那样去完整地定义类型。

接口继承类

当接口继承了一个类类型时,它会继承类的成员但不包括其实现。 就好像接口声明了所有类中存在的成员,但并没有提供具体实现一样。 接口同样会继承到类的private和protected成员。 这意味着当你创建了一个接口继承了一个拥有私有或受保护的成员的类时,这个接口类型只能被这个类或其子类所实现(implement)。当你有一个庞大的继承结构时这很有用,但要指出的是你的代码只在子类拥有特定属性时起作用。 这个子类除了继承至基类外与基类没有任何关系。 例:

class Control {private state: any;
}interface SelectableControl extends Control {select(): void;
}class Button extends Control implements SelectableControl {select() {}
}class TextBox extends Control {}class Image implements SelectableControl {select() {}
}

运行后会爆出如下异常

⨯ Unable to compile TypeScript:
src/interface_8.ts(54,7): error TS2300: Duplicate identifier 'Image'.
src/interface_8.ts(54,7): error TS2420: Class 'Image' incorrectly implements interface 'SelectableControl'.Property 'state' is missing in type 'Image'.

在上面的例子里,SelectableControl包含了Control的所有成员,包括私有成员state。 因为 state是私有成员,所以只能够是Control的子类们才能实现SelectableControl接口。 因为只有 Control的子类才能够拥有一个声明于Control的私有成员state,这对私有成员的兼容性是必需的。

在Control类内部,是允许通过SelectableControl的实例来访问私有成员state的。 实际上, SelectableControl接口和拥有select方法的Control类是一样的。 Button和TextBox类是SelectableControl的子类(因为它们都继承自Control并有select方法),但Image和Location类并不是这样的。

本实例结束实践项目地址

https://github.com/durban89/typescript_demo.git
tag: 1.0.14

TypeScript基础入门 - 接口 - 继承接口相关推荐

  1. TypeScript基础入门 - 接口 - 可索引的类型

    转载地址 TypeScript基础入门 - 接口 - 可索引的类型 项目实践仓库 https://github.com/durban89/typescript_demo.git tag: 1.0.11 ...

  2. TypeScript基础入门 - 接口 - 简介

    转载地址 TypeScript基础入门 - 接口 - 简介 项目实践仓库 https://github.com/durban89/typescript_demo.git tag: 1.0.6 为了保证 ...

  3. TypeScript基础入门 - 接口 - 可选属性

    2019独角兽企业重金招聘Python工程师标准>>> 转载地址 TypeScript基础入门 - 接口 - 可选属性 项目实践仓库 https://github.com/durba ...

  4. TypeScript基础入门 - 泛型 - 泛型类型

    2019独角兽企业重金招聘Python工程师标准>>> 转载 TypeScript基础入门 - 泛型 - 泛型类型 项目实践仓库 https://github.com/durban8 ...

  5. TypeScript基础入门之高级类型的可辨识联合(Discriminated Unions)

    2019独角兽企业重金招聘Python工程师标准>>> 转发 TypeScript基础入门之高级类型的可辨识联合(Discriminated Unions) 高级类型 可辨识联合(D ...

  6. TypeScript基础入门 - 函数 - 简介

    2019独角兽企业重金招聘Python工程师标准>>> 转载 TypeScript基础入门 - 函数 - 简介 项目实践仓库 https://github.com/durban89/ ...

  7. Java接口继承接口

    直接先上代码 package practice;public interface A {public void getName(); } package practice;public interfa ...

  8. Java 接口继承接口 (多继承机制)

    文章目录 问题原因 一个接口可以同时继承多个接口 接口不能实现任何接口 一个类可以实现多个接口 一个类只能继承一个父类 总结: 问题原因 今天在看集合源码的时候,突然看到接口继承接口,觉得有点差异,以 ...

  9. 接口继承接口,类实现接口

    接口继承接口 1.类与类之间是单继承的,直接父类只有一个 2.类与接口之间是多实现的,一个类可以有多个接口 3.接口与接口之间是多继承的 注意事项: 1.多个父接口当中的抽象方法如果重复没有关系(抽象 ...

最新文章

  1. dnf超时空漩涡副本路线流程图_DNF超时空漩涡真的不难,掌握这些技巧和打法,自己开团当团长!...
  2. 安装了多个Oracle11g的客户端,哪个客户端的tnsnames.ora会起作用?
  3. 【第九课】MriaDB密码重置和慢查询日志
  4. 信息学奥赛一本通 2033:【例4.19】阶乘之和
  5. mysql 数据库 更新_mysql数据库更新
  6. mysql 8 强制修改密码_Mysql 8.0版本强制无密码进入+更改密码
  7. root用户改动普通用户文件
  8. 基于OpenCv的人脸识别系统设计
  9. 指导CoVaR,基于Copula、GARCH、DCC、分位数回归、藤VineCopula
  10. windows优化大师8周年纪念版_P5SPS4体验版上线|青之驱魔师10周年纪念新卷发售【搞趣日报】...
  11. 基于javaEE的房产中介管理系统
  12. tf.nn.tanh 双曲正切曲线
  13. 微信自动回复和群聊消息完善
  14. php fpm 504,php为什么会出现504错误
  15. 薅羊毛php源码,基于AutoJs实现的薅羊毛App专业版源码大分享---更新啦
  16. OROCOS之KDL(1)—— windows环境搭建篇
  17. 设计素材|最流行的抽象流体彩色渐变海报,艺术感爆棚
  18. 计算机中rom,计算机中rom指的是内存还是外存
  19. Qt|layout布局相关,layout属性的含义及使用
  20. 【无标题】IP地址段必须正好可以聚合成1个地址块

热门文章

  1. 无刷新删除 Ajax,JQuery
  2. java-容器-ArrayList
  3. 安装交叉工具链arm-linux-gcc
  4. 学习嵌入式系统需要具备的条件、方法及步骤
  5. 向设计师分享最新30款免费英文字体
  6. php lyadmin,index.php
  7. python0.1+0.2_为什么0.1+0.2=0.30000000000000004
  8. SQL Server的WAITFOR DELAY注入
  9. 模糊测试工具Simple Fuzzer
  10. OpenVAS漏洞扫描基础教程之创建用户