Typescript 学习笔记六:接口
目录:
- Typescript 学习笔记一:介绍、安装、编译
- Typescript 学习笔记二:数据类型
- Typescript 学习笔记三:函数
- Typescript 学习笔记四:回忆Es5 中的类
- Typescript 学习笔记五:类
- Typescript 学习笔记六:接口
- Typescript 学习笔记七:泛型
Typescript 中的接口
接口的作用:在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范,在程序设计里面,接口起到一种限制和规范的作用。接口定义了某一批类所需要遵守的规范,接口不关心这些类的内部状态数据,也不关心这些类里方法的实现细节,它只规定这批类里必须提供某些方法,提供这些方法的类就可以满足实际需要。
Typescrip 中的接口类似于 java,同时还增加了更灵活的接口类型,包括属性、函数、可索引和类等。
定义标准。
属性类接口
对 对象属性 的约束。
ts 中属性对象传参,对方法传入的对象及属性进行约束。
function printLabel (label: {label:string}):void {
console.log(`print label:${label.label}`);
}
printLabel({label: '标签'}); // 必须传入带有label属性,且属性值是字符串的对象
// printLabel({label: '标签', name: 'text'}); // 错误
// printLabel({name: '标签'}); // 错误
// printLabel('标签'); // 错误
接口:行为和动作的规范,对批量方法传入参数进行约束。
用关键字interface
定义,用分号结束。约定接口名首字母大写。
interface FullName {
firstName:string; // 注意,用分号结束
secondName:string;
}
function printName (name:FullName):void {
// 必须传入对象,且带有属性:firstName,secondName,且属性值都是字符串
console.log(`${name.firstName} -- ${name.secondName}`);
}
printName({firstName:'张', secondName: '三'}); // 必须带有 firstName,secondName
// printName({firstName:'张', secondName: '三', name: '张三'}); // 错误 只能带有 firstName,secondName
const nameObj = {firstName:'张', secondName: '三', name: '张三', age: 20};
printName(nameObj); // 正确,这种方式,可以传额外的,但是 firstName、secondName 必须有
printName({ // 参数的顺序可以不一样
secondName: '四',
firstName: '李'
})
function getName (name:FullName):string {
return `${name.firstName} -- ${name.secondName}`;
}
getName({firstName:'张', secondName: '三'});
接口,可选属性
interface FullName {
firstName:string;
secondName?:string; // ? 代表可选
}
printName({firstName:'张'});
函数类型接口
对方法传入的参数以及返回值进行约束,批量约束。
interface Encrytp {
(key:string, val:string):string;
}
let md5:Encrytp = function (key:string, val:string):string {
// 具体加密省略
return key + val;
}
console.log(md5('name', 'Jane')); // nameJane
let hash:Encrytp = function (key:string, val:string):string {
// 具体加密省略
return key + ' ---- ' + val;
}
console.log(hash('name', 'Jane')); // name ---- Jane
可索引接口
对数组、对象的约束(不常用)
ts 中数组的两种定义方式:
let arr1:Array<number> = [1, 2];
let arr2:string[] = ['12', '23'];
ts 中可索引接口,对数组的约束
interface userArr {
[index:number]:string;
}
let arr3:userArr = ['a', 'b'];
console.log(arr3[0]);
// let arr4:userArr = [12, 34]; // 错误
ts 中可索引接口,对对象的约束
interface userObj {
[index:string]:string;
}
let obj1:userObj = {name: 'Jane'};
// let obj2:userObj = {age: 12}; // 错误
类类型接口
对类的约束,和抽象类有点相似。类类型接口实现用关键字implements
interface Animal {
name:string;
eat (food:string):void;
}
class Dog implements Animal { // 类类型接口实现用关键字 implements
name:string;
constructor (name:string) {
this.name = name;
}
eat (food:string):void {
console.log(`${this.name}喜欢吃${food}`);
}
}
let d = new Dog('小黑');
d.eat('骨头'); // 小黑喜欢吃骨头
class Cat implements Animal {
name:string;
constructor (name:string) {
this.name = name;
}
eat (food:string):void {
console.log(`${this.name}喜欢吃${food}`);
}
}
let c = new Cat('小白');
c.eat('老鼠'); // 小白喜欢吃老鼠
接口扩展
接口可以继承接口
interface Animal {
eat ():void;
}
interface Person extends Animal {
work ():void;
}
class Web implements Person {
name:string;
constructor (name:string) {
this.name = name;
}
// 接口 Animal 中的方法必须实现
eat ():void {
console.log(`${this.name}喜欢吃甜点`);
}
// 接口 Person 中的方法必须实现
work ():void {
console.log(`${this.name}在运动`);
}
}
let w = new Web('小李');
w.eat();
w.work();
继承类并实现接口
interface Animal {
eat ():void;
}
interface Person extends Animal {
work ():void;
}
class Programmer {
name:string;
constructor (name:string) {
this.name = name;
}
coding () {
console.log(`${this.name}在写代码`);
}
}
class Web extends Programmer implements Person {
constructor (name:string) {
super(name);
}
// 接口 Animal 中的方法必须实现
eat ():void {
console.log(`${this.name}喜欢吃甜点`);
}
// 接口 Person 中的方法必须实现
work ():void {
console.log(`${this.name}在运动`);
}
}
let w = new Web('小李');
w.eat();
w.work();
w.coding(); // 小李在写代码
Typescript 学习笔记六:接口的更多相关文章
- TypeScript学习笔记之接口类型
TypeScript的接口,个人理解就是一种约束,包括各种类型的契约或者代码定义上的契约.当然,和java中的用法基本一致,接口可以被继承也可以被实现. 定义一个简单的interface interf ...
- Typescript 学习笔记七:泛型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记四:回忆ES5 中的类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记二:数据类型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记三:函数
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- Typescript 学习笔记一:介绍、安装、编译
前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...
- java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)
java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...
- # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)
目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...
随机推荐
- 移动端过禁止输入emoji表情实现方案
最近手头上的项目有一个需求就是输入框不能输入表情,然后就各种在网上找资料,网上好多人给的方案是: str = str.replace(/\uD83C[\uDF00-\uDFFF]|\uD83D[\uD ...
- python入门 -- 学习笔记4
习题38:列表的操作 当你看到像 mystuff.append('hello') 这样的代码时,你事实上已经在 Python 内部激发了一个连锁反应.以下是它的工作原理: 1. Python 看到你用 ...
- Spring获取bean工具类,可用于在线程里面获取bean
Spring获取bean工具类,可用于在线程里面获取bean import java.util.Locale; import org.springframework.beans.BeansExcept ...
- 网页屏蔽f12、右键菜单等操作
1.屏蔽f12 document.onkeydown = function(){ if(window.event && window.event.keyCode == 123) { a ...
- Django的rest_framework的权限组件和频率组件源码分析
前言: Django的rest_framework一共有三大组件,分别为认证组件:perform_authentication,权限组件:check_permissions,频率组件:check_th ...
- Java线程池的构造以及使用
有时候,系统需要处理非常多的执行时间很短的请求,如果每一个请求都开启一个新线程的话,系统就要不断的进行线程的创建和销毁,有时花在创建和销毁线程上的时间会比线程真正执行的时间还长.而且当线程数量太多时, ...
- Solidity合约间的调用 -Solidity通过合约转ERC20代币
Solidity通过合约转ERC20代币 ERC20代币并不能像Ether一样使用sendTo.transfer(amt)来转账,ERC20代币只能通过token中定义的transfer方法来转账 ...
- https 网络传输安全架设
1:在集群的情况下,不能在tomcat上 架构ssl 而是在总路由nginx上架设具体实现如下截图 非对称加密是当前流行的加密传输方式 证书是什么 . 在浏览器证书查看 证书是访问请求时 https ...
- js--sort()排序方法的使用--(笔记)
情况1: var arr = [ 'c', 'd', 'a', 'e' ]; //都是字母的情况arr.sort();//alert( arr ); ...
- Linux 第四天
1.文件搜索命令 1)locate 在文件资料库中查找文件(需要文件资料库中有,新建的文件查不到,需要手动更新,updatedb.查不到/tmp目录下的文件) 语法:locate 文件名 常用选项: ...