TypeScript 之 interface 和 type 的区别

结论:

1、可以声明的数据类型

type 可以修饰任何类型 (值类型和引用数据类型)

interface 只能修饰引用类型 (对象、数组、函数)

//interface 声明对象属性
interface ins {a: string;b?: number; //可选项
}// interface声明函数作为对象属性的三种写法
interface ins1 {fun: () => string;
}
interface ins2 {fun(): string;
}
interface ins3 {fun: { (): string };
}
let i: ins3 = {fun: () => "444",
};//声明独立函数
interface C {(): string;
}
//等于
type fun = () => string;
let f: C = () => "333";

2、是否可以重复声明 

重名的 interface 自动合并,如果属性的类型冲突报错

 如果重名的 type 报错,自能声明一个

3、是否可以扩展

interface 通过 extends 实现

 type 通过 & 实现  (交叉类型)

4.是否可以枚举 (快速复制另一个类型)

interface 不支持枚举

type可以:

场景:

// server data
let mockData = {a: "3",b: 2,c: {s: 6,j: [1, 8, 4],},d: [{ a: 2 }, { a: 3 }],
};
//插件 json to ts      
interface RootObject {a: string;b: number;c: C;d: D[];
}
interface D {a: number;
}
interface C {s: number;j: number[];
}
// component use
// import RootObject from   myType.ts
type copyType = {[k in keyof RootObject]: RootObject[k];
};

5. 是否可以使用 this

interface 可以使用,type不可以

interface C {add(): this;
}
class ins implements C {constructor() {}add() {return this;}
}

6、方法是否可以重载

java概念:

重写:子类对父类同名方法进行重写,返回值和形参都不能改变,当需要在子类中调用父类的被重写方法时,要使用 super 关键字。

重载:一个类可以有多个同名方法,但是方法的参数个数不能相同,实例调用时可以根据参数不同执行不同的逻辑,返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。

方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

  • (1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载(Overloading)。
  • (2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写(Overriding)。
  • (3)方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

与java不同的是: 

ts 的重载只能用 同一个方法体 实现 ,同名接口合并时,如果同名方法有不同的类型声明,那么会发生函数重载。而且,后面的定义比前面的定义具有更高的优先级。

interface A {f(): number;f(x: boolean): boolean;f(x: string, y: string): string;
}function MyFunc(): number;
function MyFunc(x: boolean): boolean;
function MyFunc(x: string, y: string): string;
function MyFunc(x?:boolean|string, y?:string
):number|boolean|string {if (x === undefined && y === undefined) return 1;if (typeof x === 'boolean' && y === undefined) return true;if (typeof x === 'string' && typeof y === 'string') return 'hello';throw new Error('wrong parameters');  
}const a:A = {f: MyFunc
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/313891.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring创建与使用

spring创建与使用 创建 Spring 项⽬创建⼀个 Maven 项⽬添加 Spring 框架⽀持添加启动类 存储 Bean 对象创建 Bean将 Bean 注册到容器 获取并使⽤ Bean 对象创建 Spring 上下⽂获取指定的 Bean 对象获取bean对象的方法 使⽤ Bean 总结 创建 Spring 项⽬ 接下来使⽤ Maven ⽅式…

简写英语单词

题目: 思路: 这段代码的主要思路是读取一个字符串,然后将其中每个单词的首字母大写输出。具体来说,程序首先使用 fgets 函数读取一个字符串,然后遍历该字符串中的每个字符。当程序遇到一个字母时,如果此时…

Django开发3

Django开发3 Django开发编辑用户9.靓号管理9.1 表结构9.2 靓号列表9.3 新建靓号9.4 编辑靓号9.5 搜索手机号9.6 分页 10.时间插件11.ModelForm和BootStrap操作 各位小伙伴想要博客相关资料的话关注公众号:chuanyeTry即可领取相关资料! Django开发 部门管…

系统功能测试的最好方法

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情 测试系统功能是软件开发和工程过程中的关键步骤。 它确保系统或软件应用程序按预期运行、满足用户要求并可靠运行。 在这里,我们深入探讨最佳方法&a…

软件测试/测试开发丨Linux进程与线程学习笔记

1、进程 可执行程序的运行态操作系统调度的基本单位线程容器进程本身包含指令、数据等资源 2、 线程 进程中被执行的最小单元cpu 调度的基本单位线程带有指令、数据等资源 3、 进程的生命周期 如执行sleep 100或者执行一个python脚本 创建:created sleep 100 ./…

JavaScript的三种引入的方式

目录 (一).什么是JS1.1JS的特点1.2JS的组成 (二).JS引用的三种方式2.1标签引用(或嵌入式)2.2文件引用(外链式)2.3行内式 (三).JS三种引用方式的优缺点1.行内方式:2.标签引用(或嵌入式):3.文件引…

48、激活函数 - 梯度消失和梯度爆炸

简单介绍下梯度消失和梯度爆炸,这个不是重点,但是我觉得有必要再深入了解这个概念,以及很多激活函数为什么是可以防止梯度消失的。 梯度消失和梯度爆炸实际上是在神经网络训练过程中经常会遇到的两类问题,这两类问题都与梯度有关。 什么是梯度 在神经网络训练中,梯度是指…

将学习自动化测试时的医药管理信息系统项目用idea运行

将学习自动化测试时的医药管理信息系统项目用idea运行 背景 学习自动化测试的时候老师的运行方式是把医药管理信息系统项目打包成war包后再放到tomcat的webapp中去运行,于是我想着用idea运行会方便点,现在记录下步骤方便以后查找最开始没有查阅资料&am…

vue脚手架安装

1、安装: npm i vue/cli -g(-g全局安装,全名global) vue --version 查看版本号 2、使用 vue create 项目名称 3、安装选择项 最后一个选N

笔记本安装Centos Stream9系统的详细安装教程-第二版

笔记本安装Centos Stream9系统的详细安装教程-第一版: 笔记本安装Centos Stream9系统的详细安装教程_u盘安装centos 9-CSDN博客文章浏览阅读298次。笔记本安装Centos Stream9系统的详细安装教程 U盘刻录工具_u盘安装centos 9https://blog.csdn.net/wtl1992/article…

UnityShader(四)一个最简单的顶点/片元着色器

目录 顶点/片元着色器的基本结构: 简单的例子 增加模型数据 顶点着色器和片元着色器之间的通信 顶点/片元着色器的基本结构: Shader "MyShaderName"{Properties{//属性}SubShader{//针对显卡A的SubShaderPass{//设置渲染状态和标签//开始C…

VMware虚拟机和Centos7镜像安装

文章目录 安装VMware虚拟机1、下载2、激活 安装Centos7镜像启动虚拟机 安装VMware虚拟机 1、下载 建议还是安装16版本 VMware16下载 https://www.123pan.com/s/HQeA-aX1Sh VMware15 链接:https://pan.baidu.com/s/11UD1hb6IydbxNNPxmh-MqA?pwd0630 提取码&am…