IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> 二、TypeScript Interfaces 接口 -> 正文阅读

[JavaScript知识库]二、TypeScript Interfaces 接口


Interfaces 接口

接口是对象的属性和方法的抽象描述

比如:一个叫小猫的小黑狗正在吃骨头,一个叫小狗的小白猫正在吃猫粮… 动物都会有个名称、颜色、都有吃东西的方法

接口定义 interface

// 接口 用 interface 来定义
interface Animal {
    name: string;
    color: string;
    eat(): void;
}

const dog: Animal = {
    name: '小猫',
    color: '黑',
    eat(): void {
        // 一个叫小猫的小黑狗正在吃骨头
        console.log(`一个叫${this.name}的小${this.color}狗正在吃骨头`);
    }
}
dog.eat();
const cat: Animal = {
    name: '小狗',
    color: '白',
    eat(): void {
        // 一个叫小狗的小白猫正在吃猫粮
        console.log(`一个叫${this.name}的小${this.color}猫正在吃猫粮`);
    }
}
cat.eat();

有小聪明就说了,我的狗就没名字,你定义的name让我传啥???

可选属性 ?

接口里的属性不全都是必需的。 有些是只在某些条件下存在,或者根本不存在,
带有可选属性的接口与普通的接口定义差不多,只是在可选属性名字定义的后面加一个 ? 符号。

// 接口 用 interface 来定义
interface Animal {
    name?: string; //可选参数
    color: string;
    eat(): void;
}

const dog: Animal = {
    name: '小猫',
    color: '黑',
    eat(): void {
        // 一个叫小猫的小黑狗正在吃骨头
        console.log(`一个叫${this.name}的小${this.color}狗正在吃骨头`);
    }
}
dog.eat();
const cat: Animal = {
    name: '小狗',
    color: '白',
    eat(): void {
        // 一个叫小狗的小白猫正在吃猫粮
        console.log(`一个叫${this.name}的小${this.color}猫正在吃猫粮`);
    }
}
cat.eat();

const pig: Animal = {
    color: '白蓝灰',
    eat(): void {
        // 一个叫undefined的小白蓝灰猪正在吃人参
        console.log(`一个叫${this.name}的小${this.color}猪正在吃人参`);
    }
}
pig.eat();

有天小狗的小白猫心血来潮,非要把自己搞成绿色,让我突然觉得他好陌生。为了避免这一点,决定不让他们染色。

只读属性 readonly

一些对象属性只能在对象刚刚创建的时候修改其值。 你可以在属性名前用 readonly 来指定只读属性

// 接口 用 interface 来定义
interface Animal {
    name?: string;
    readonly color: string;
    eat(): void;
}

const cat: Animal = {
    name: '小狗',
    color: '白',
    eat(): void {
        // 一个叫小狗的小白猫正在吃猫粮
        console.log(`一个叫${this.name}的小${this.color}猫正在吃猫粮`);
    }
}

// cat.color = '布灵布灵'; // 无法分配到 "color" ,因为它是只读属性。

cat.eat();


readonly vs const

最简单判断该用 readonly 还是 const 的方法是看要把它做为变量使用还是做为一个属性。 做为变量使用的话用 const,若做为属性则使用 readonly


类类型

类实现接口

关键字 implements 接口名称

// 接口 用 interface 来定义
interface Animal {
    name?: string;
    readonly color: string;
    eat(): void;
}
// 接口使用 用 关键字 implements
class Cat implements Animal {
    name?: string;
    readonly color: string;
    constructor(color: string, name?: string) {
        this.color = color;
        this.name = name;
    }
    eat(): void {
        console.log(`一个叫${this.name}的小${this.color}猫正在吃猫粮`);
    }
}
const cat = new Cat('白', '小狗');
// 一个叫小狗的小白猫正在吃猫粮
cat.eat();

一个类实现多个接口

接口之间用,隔开

// 接口 用 interface 来定义
interface Animal {
    name?: string;
    readonly color: string;
    eat(): void;
}

interface Hobby {
    smoking(): void;
    drinking(): void;
    perm(): void;
}
class Cat implements Animal, Hobby {
    name?: string;
    readonly color: string;
    constructor(color: string, name?: string) {
        this.color = color;
        this.name = name;
    }
    eat(): void {
        console.log(`一个叫${this.name}的小${this.color}猫正在吃猫粮`);
    }
    smoking(): void {
        console.log(`一个叫${this.name}的小${this.color}猫正在抽烟`);
    }
    drinking(): void {
        console.log(`一个叫${this.name}的小${this.color}猫正在喝酒`);
    }
    perm(): void {
        console.log(`一个叫${this.name}的小${this.color}猫正在烫头`);
    }
    yuFun(): void {
        this.smoking();
        this.drinking();
        this.perm();
    }
}
const cat = new Cat('白', '小狗');
// 一个叫小狗的小白猫正在抽烟
// 一个叫小狗的小白猫正在喝酒
// 一个叫小狗的小白猫正在烫头
cat.yuFun();

接口继承接口

随着社会的发展,现在的狗都新增了舔的功能,需要重新定义dog接口

interface Animal {
    name?: string;
    readonly color: string;
    eat(): void;
}

interface Hobby {
    smoking(): void;
    drinking(): void;
    perm(): void;
}

interface Dog extends Animal, Hobby {
    lick(): void;
}

class ScDog implements Dog {

    name?: string;
    color: string;
    eat(): void {
        console.log(`一个叫${this.name}的小${this.color}狗正在吃骨头`);
    }
    smoking(): void {
        console.log(`一个叫${this.name}的小${this.color}狗正在抽烟`);
    }
    drinking(): void {
        console.log(`一个叫${this.name}的小${this.color}狗正在喝酒`);
    }
    perm(): void {
        console.log(`一个叫${this.name}的小${this.color}狗正在烫头`);
    }
    lick(): void {
        console.log(`舔得狗中狗,方为狗中皇`);
    }
}

const scDog = new ScDog();
scDog.name = '不撕不葱';
scDog.color = '金色';
// 一个叫不撕不葱的小金色狗正在吃骨头
scDog.eat();
// 一个叫不撕不葱的小金色狗正在抽烟
scDog.smoking();
// 一个叫不撕不葱的小金色狗正在喝酒
scDog.drinking();
// 一个叫不撕不葱的小金色狗正在烫头
scDog.perm();
// 舔得狗中狗,方为狗中皇
scDog.lick();
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-02-19 01:03:52  更:2022-02-19 01:04:53 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:46:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码