接口 索引签名 接口与类型别名的异同 接口的继承 函数接口
接口的基本使用 (接口也是一种数据类型)
接口是一种抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要具体的类去实现,然后第三方就可以同这组抽象方法调用,让具体的类执行具体的方法
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);
接口 索引签名 接口与类型别名的异同 接口的继承 函数接口相关推荐
- java类索引_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...
讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...
- JVM虚拟机-Class文件之类索引、父类索引和接口索引集合
一.概述 前面介绍了class文件,包括魔数.次版本号.主版本号.常量池和访问标志.接下来的就是用于确定这个类的继承关系的类索引(this_class).父类索引(super_class)与接口索引集 ...
- java虚拟机标志_《Java虚拟机原理图解》1.3、class文件中的访问标志、类索引、父类索引、接口索引集合...
讲完了class文件中的常量池,我们就相当于克服了class文件中最麻烦的模块了.现在,我们来看一下class文件中紧接着常量池后面的几个东西:访问标志.类索引.父类索引.接口索引集合. 1. 访问标 ...
- [一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念...
本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的函数 ...
- java中函数是什么_[一] java8 函数式编程入门 什么是函数式编程 函数接口概念 流和收集器基本概念...
本文是针对于java8引入函数式编程概念以及stream流相关的一些简单介绍 什么是函数式编程? java程序员第一反应可能会理解成类的成员方法一类的东西 此处并不是这个含义,更接近是数学上的函数 看 ...
- 还看不懂同事的代码?Lambda 表达式、函数接口了解一下
本文经授权转载自微信公众号:未读代码 Java 8 早已经在2014 年 3月 18日发布,毫无疑问 Java 8 对 Java 来说绝对算得上是一次重大版本更新,它包含了十多项语言.库.工具.JVM ...
- TypeScript中的联合类型、类型别名、接口、类型断言
一.联合类型 在TypeScript中,联合类型(Union Types)是指用"|"符号将多个类型组合成一个的类型.这种类型可以包含不同的类型,例如字符串.数字或对象.这些不同类 ...
- Go 学习笔记(27)— type 关键字(类型定义、类型别名、类型查询、定义接口、定义结构体)
1. 类型别名定义 定义类型别名的写法为: type TypeAlias = Type 类型别名规定: TypeAlias 只是 Type 的别名,本质上 TypeAlias 与 Type 是同一个类 ...
- 接口 vs 类型别名
类型别名会给一个类型起个新名字.类型别名有时和接口很像,但是可以作用于原始值,联合类型,元组以及其它任何你需要手写的类型. type Name = string; type NameResolver ...
最新文章
- java openssl库,Java的OpenSSL
- 如何改android device monitor文件的权限
- Centos中提示You have new mail in /var/spool/mail/root 解决
- Xmanager连接Linux桌面异常解决方案
- 拓扑排序(Topology_Sort)
- 创建数据库连接字符串的快截方法
- JSF范围教程– JSF / CDI会话范围
- Netty异步非阻塞事件驱动及原理详解
- apache 验证 php 安装,PHP的安装以及验证Apache
- java手写map,手写 RxJava ---- map 操作符
- Python 数据结构与算法——归并排序
- 万无一失,网站的高可用架构
- 【Python】勒索病毒模拟
- 几何学在计算机中应用,分形几何在计算机图形学中的应用
- 2021年G3锅炉水处理模拟考试及G3锅炉水处理考试试题
- 数字电视标准5种规格720p、1080i和…
- 使用硕正插件在strtus2框架下返回数据问题
- 主域名跳转到带www的域名方法,以及对seo有什么影响?
- java ews_Java---使用EWS读取exchange邮件
- 【密码学】DES加解密原理及其Java实现算法