接口的基本使用  (接口也是一种数据类型)

接口是一种抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要具体的类去实现,然后第三方就可以同这组抽象方法调用,让具体的类执行具体的方法

export default {}
interface IFullName {firstName: string,lastName: string
}
let name: IFullName = {firstName: "张",lastName: "老六"
}
console.log(name.firstName, name.lastName);function say({ firstName, lastName }: IFullName): void {console.log(`你真是个${firstName}${lastName}`)
}
say(name)

可选属性与只读属性

可选属性使用 : ?

只读属性使用:readonly

readonly与const的区别:作为变量使用的话用const ,若做为属性则使用readonly

export default {}
// 可选属性用 ? 来进行修饰
interface IFullName {firstName: string,lastName: string,age?: number
}
let goddassName: IFullName = {firstName: "张三",lastName: "赵四",age: 34
}
console.log(goddassName.firstName);
console.log(goddassName.lastName);
// console.log("ss");// 只读属性
//顾名思义就是这个属性是不可以修改的,对象属性只能在对象刚刚创建的时候修改其值。 你可以在属性名前用 readonly来指定只读属性
interface IInfo {readonly name: string,readonly age: number
}
let info: IInfo = {name: "张三",age: 23
}
// console.log(info.name);
// console.log(info.age);// info.name="赵四" //不可以修改
// info.age=34  //不可以修改

索引签名

定义:索引签名用于描述那些"通过索引得到"的类型

格式:如[props:string]:any

应用场景:解决参数问题的物种 方法

export default {}interface IFullName {firstName: string,lastName: string,age?: number,singName?: string,[props: string]: any
}
// 注意点:如果使用接口来限定变量或者形参,那么再给变量或者形参赋值的时候,多一个或少一个都不行
//    (实际开发中往往会出现多或者少的情况怎样解决)
// 方案一  解决方案:可选属性
let goddass1: IFullName = { firstName: "杨", lastName: "张三" }
let goddass2: IFullName = { firstName: "李", lastName: "赵四", age: 43, singName: "赵一" }
// 方案二 解决方案使用变量
let info = { firstName: "杨", lastName: "张三", song: "song" }
let goddass3: IFullName = info;
// console.log(goddass3);    //{ firstName: '杨', lastName: '张三', song: 'song' }
// 第三种方案 使用类型断言
let goddass4: IFullName = ({ firstName: "赵四", lasrName: "赵四", age: 12, ssss: 43 }) as IFullName;
console.log(goddass4);
// 第四种方案 索引签名
interface IBeauty {[props: string]: string
}
let IBeauty = { fristName: "张", last: "三", age: "十岁" }
console.log(IBeauty);
interface IAge {[props: string]: number
}
let ages = { age: 43, num: 32, sum: 64 }
// 案例
interface IMyFullName {first: string,last: string,[props: string]: string
}
let goddass5: IMyFullName = { first: "张三", last: "张四", sex: "女" }

函数接口

export default {}interface IMyFullName {(salary: number, rewary: number): number
}
let sum: IMyFullName = function (x: number, y: number): number {return x + y
}
let he = sum(1, 4)
console.log(he);

接口的继承

接口继承就是说接口可以通过其他接口来扩展自己

TS允许接口继承多个接口

继承使用关键字extends

单继承  多继承

export default {}
// 单继承
interface IMyFullName {age: number
}
//        子                父
interface firstName extends IMyFullName {name: string}
let lady: firstName = {name: "张三",age: 43
}
console.log(lady.age);
console.log(lady.name);
// 多继承interface Name {m1: number
}
interface Age {m2: number
}
interface ziyuan extends Name, Age {m3: string
}
let lady2: ziyuan = {m1: 34,m2: 34,m3: "ss"
}
console.log(lady2.m1);
console.log(lady2.m2);
console.log(lady2.m3);

接口与类型别名的异同

// 相同点:1.都可以描述属性或方法

//               2.都允许拓展

// 不同点:1.type 可以声明基本类型别名,联合类型,[元组]

// ​               2.当出现使用type和interface声明同名变量 type会直接报错    interface会进行组合

都可以描述属性和方法

// 都可以描述属性 和方法
type WomanStar = {name: string,age: number,show(): void
}interface IWomanStar {name: string,age: number,show(): void
}
// 类型别名
let star1: WomanStar = {name: "张三",age: 34,show() {console.log("show1");}
}
let star2: IWomanStar = {name: "张四",age: 23,show() {console.log("show2");}
}
console.log(star1);
console.log(star2);

都可以扩展

// 都可以扩展
type Fnn1 = {name: string
}
type Fnn2 = Fnn1 & {name2: number
}
let sum: Fnn2 = {name: "张三",name2: 34
}
console.log(sum.name, sum.name2);
// 别名
interface Qnn1 {age: string
}
interface Qnn2 extends Qnn1 {age1: number
}
// 接口
let star: Qnn2 = {age: "张武",age1: 23
}
console.log(star);

不同点:

// 1.type可以声明基本数据类型,联合类型,数组等
type a = number;
type b = string;
type c = string[];
type d = [number | string]// interface只能声明变量
// interface s = string  //报错// 2.当出现使用type和interface声明同名变量时
// type会直接报错
// type Name = {
//     name: string
// }
// type Name = {
//     name: string
// } //报错// interface会进行组合
interface Age {age: number
}
interface Age {age: number,name: string
}
let Sum: Age = {age: 34,name: "赵四"
}
console.log(Sum.age);

接口 索引签名 接口与类型别名的异同 接口的继承 函数接口相关推荐

  1. java类索引_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...

    讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...

  2. JVM虚拟机-Class文件之类索引、父类索引和接口索引集合

    一.概述 前面介绍了class文件,包括魔数.次版本号.主版本号.常量池和访问标志.接下来的就是用于确定这个类的继承关系的类索引(this_class).父类索引(super_class)与接口索引集 ...

  3. java虚拟机标志_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...

    讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...

  4. [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念...

    本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程?   java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的函数 ...

  5. java中函数是什么_[一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念...

    本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的函数 看 ...

  6. 还看不懂同事的代码?Lambda 表达式、函数接口了解一下

    本文经授权转载自微信公众号:未读代码 Java 8 早已经在2014 年 3月 18日发布,毫无疑问 Java 8 对 Java 来说绝对算得上是一次重大版本更新,它包含了十多项语言.库.工具.JVM ...

  7. TypeScript中的联合类型、类型别名、接口、类型断言

    一.联合类型 在TypeScript中,联合类型(Union Types)是指用"|"符号将多个类型组合成一个的类型.这种类型可以包含不同的类型,例如字符串.数字或对象.这些不同类 ...

  8. Go 学习笔记(27)— type 关键字(类型定义、类型别名、类型查询、定义接口、定义结构体)

    1. 类型别名定义 定义类型别名的写法为: type TypeAlias = Type 类型别名规定: TypeAlias 只是 Type 的别名,本质上 TypeAlias 与 Type 是同一个类 ...

  9. 接口 vs 类型别名

    类型别名会给一个类型起个新名字.类型别名有时和接口很像,但是可以作用于原始值,联合类型,元组以及其它任何你需要手写的类型. type Name = string; type NameResolver ...

最新文章

  1. java openssl库,Java的OpenSSL
  2. 如何改android device monitor文件的权限
  3. Centos中提示You have new mail in /var/spool/mail/root 解决
  4. Xmanager连接Linux桌面异常解决方案
  5. 拓扑排序(Topology_Sort)
  6. 创建数据库连接字符串的快截方法
  7. JSF范围教程– JSF / CDI会话范围
  8. Netty异步非阻塞事件驱动及原理详解
  9. apache 验证 php 安装,PHP的安装以及验证Apache
  10. java手写map,手写 RxJava ---- map 操作符
  11. Python 数据结构与算法——归并排序
  12. 万无一失,网站的高可用架构
  13. 【Python】勒索病毒模拟
  14. 几何学在计算机中应用,分形几何在计算机图形学中的应用
  15. 2021年G3锅炉水处理模拟考试及G3锅炉水处理考试试题
  16. 数字电视标准5种规格720p、1080i和…
  17. 使用硕正插件在strtus2框架下返回数据问题
  18. 主域名跳转到带www的域名方法,以及对seo有什么影响?
  19. java ews_Java---使用EWS读取exchange邮件
  20. 【密码学】DES加解密原理及其Java实现算法

热门文章

  1. 透视变换完成目标跟踪物体速度测试
  2. SII-Slave Information Interface
  3. Linux安装使用及命令大全
  4. Java SSM面试篇
  5. android x86评测,异于Win8新体验 x86版Android4.0解析
  6. 怎么打开计算机的音乐模式,xp开机音乐怎么设置 如何设置开机音乐
  7. 计算机桌面设备管理器,电脑设备管理器在哪里打开【图文】
  8. Alpine Linux
  9. MT【145】不变的平面角
  10. Excel基础(03)查找与替换