中文网:https://www.tslang.cn/

官网:http://www.typescriptlang.org/

目录:

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 学习笔记六:接口的更多相关文章

  1. TypeScript学习笔记之接口类型

    TypeScript的接口,个人理解就是一种约束,包括各种类型的契约或者代码定义上的契约.当然,和java中的用法基本一致,接口可以被继承也可以被实现. 定义一个简单的interface interf ...

  2. Typescript 学习笔记七:泛型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  3. Typescript 学习笔记五:类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  4. Typescript 学习笔记四:回忆ES5 中的类

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  5. Typescript 学习笔记二:数据类型

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  6. Typescript 学习笔记三:函数

    中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...

  7. Typescript 学习笔记一:介绍、安装、编译

    前言 整理了一下 Typescript 的学习笔记,方便后期遗忘某个知识点的时候,快速回忆. 为了避免凌乱,用 gitbook 结合 marketdown 整理的. github地址是:ts-gitb ...

  8. java之jvm学习笔记六-十二(实践写自己的安全管理器)(jar包的代码认证和签名) (实践对jar包的代码签名) (策略文件)(策略和保护域) (访问控制器) (访问控制器的栈校验机制) (jvm基本结构)

    java之jvm学习笔记六(实践写自己的安全管理器) 安全管理器SecurityManager里设计的内容实在是非常的庞大,它的核心方法就是checkPerssiom这个方法里又调用 AccessCo ...

  9. # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)

    目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...

随机推荐

  1. Mybatis控制台打印sql

    mybatis-config.xml配置如下: <configuration> <settings> <setting name="lazyLoadingEna ...

  2. python 关于文件的操作

    1.打开文件: f=open(r'E:\PythonProjects\test7\a.txt',mode='rt',encoding='utf-8') 以上三个单引号内分别表示:要打开的文件的路径,m ...

  3. springmvc shiro UnauthorizedException 异常解决方案

    springMVC 整合 shiro 时,配置了当访问某个URL没有权限时的配置处理: <!-- 通过unauthorizedUrl指定没有权限操作时跳转页面 --><propert ...

  4. SQL Server日志文件过大 大日志文件清理方法 不分离数据库

    SQL Server日志文件过大    大日志文件清理方法 ,网上提供了很多分离数据库——〉删除日志文件-〉附加数据库 的方法,此方法风险太大,过程也比较久,有时候也会出现分离不成功的现象.下面的方式 ...

  5. linux上安装字体

    安装字体命令: yum install wqy-microhei-fonts wqy-zenhei-fonts   安装完字体的存放目录:/usr/share/fonts   默认会在fonts目录下 ...

  6. 【转】GT 的性能测试方案解析

    前言 本文将整理腾讯GT各个性能测试项的测试方法,目的是为了帮助移动性能专项测试同学快速过一遍腾讯GT各个性能数据是如何获取的.另外对腾讯GT还不了解或者不知道它能做什么的同学可以看看这篇文章:htt ...

  7. CF 225C Barcode(DP)

    传送门:点我 You've got an n × m pixel picture. Each pixel can be white or black. Your task is to change t ...

  8. 获取MessageBox按钮本地字符串(OK、Cancel、Yes、No等)

    问题仍然由定制MessageBox引发. 定制MessageBox,虽加入自定义些东西,但仍然希望,最大限度接近系统原生框.碰到的问题,就是其钮文本. 即如MessageBox.Show()之Mess ...

  9. cmp指令

    cmp是比较指令,cmp的功能相当于减法指令,只是不保存结果.cmp指令执行后,将对标志寄存器产生影响.其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果. cmp指令格式: cmp 操作对象 ...

  10. stark组件开发之添加功能实现

    添加功能,还是使用, form 组件来完成!  并且 完成添加之后,需要保留原搜索条件. def memory_url(self): '''用于反向生成url, 并且携带,get请求的参数,跳转到下一 ...