TypeScript 之 interface 和 type 的区别

news2024/12/28 18:43:50

结论:

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.coloradmin.cn/o/1352219.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python主流开发工具排名,python最好用的开发工具

大家好,小编来为大家解答以下问题,python的开发工具软件有哪些,python主流开发工具排名,今天让我们一起来看看吧! 对于程序员来说,除了日常争论世界上最好的语言是哪一门以外,哪款 IDE 是最好的…

羊大师讲解长期喝羊奶的女性,身体变化与福利

羊大师讲解长期喝羊奶的女性,身体变化与福利 羊奶作为天然健康食品一直备受关注,尤其对女性来说更是具有独特的身体效益。长期喝羊奶不仅可以改善女性的健康状况,还能带来一系列积极的身体变化。本文小编羊大师将为大家详细介绍长期饮用羊奶…

程序员必知!装饰模式的实战应用与案例分析

装饰模式是一种结构型设计模式,允许在不改变对象基础上动态添加职责或行为。举个咖啡店中咖啡定制的实际例子,顾客可选不同配料装饰咖啡,每个配料视作装饰器,装饰模式优点有动态扩展、灵活性和避免类爆炸,但可能增加系…

Nacos 持久化及集群的搭建【微服务】

文章目录 一、统一配置管理二、微服务配置拉取三、配置热更新四、多环境共享配置五、Nacos 集群搭建1. 集群结构2. 初始化数据库3. 搭建集群 六、Nginx 反向代理七、启动项目测试 一、统一配置管理 案例练习的时候我们只有两个微服务,管理起来非常简单,但…

虎克:开发小程序要多少钱一个,非专业开发如何做自己的小程序

小程序开发费用主要取决于小程序的功能复杂度和开发周期。一般来说,小程序开发费用可以分为两类:模板开发和定制开发。 模板开发:模板开发是指使用现成的模板进行开发,价格相对较低,一般在几千元左右。优点是价格便宜&…

SpringSecurity-2.7中跨域问题

SpringSecurity-2.7中跨域问题 访问测试 起因 写这篇的起因是会了解到 SSM(CrosOrigin)解决跨域,但是会在加入SpringSecurity配置后,这个跨域解决方案就失效了,而/login这个请求上是无法添加这个注解或者通过配置(WebMvcConfig)去解决跨域,所以只能使用SpringSecurity提供的.c…

【接口自动化】写接口自动化case要注意的点!

可能有人会说,写接口的自动化CASE多简单了,写个参数发送请求完事了,还要注意啥? 没错,相比起UI自动化的case,你要去写各种定位器,接口自动化的case写起来确实容易多了。这也是接口自动化的一个…

APM32 移植 RTX5

打开APM32的 一个官方例子或者模板工程, MKD格式 更改工程属性,将编译器换为V6: 然后勾选 Use MicroLIB; 接着: 接着: 接着确认 然后编译,会报260个错误: 然后 打开工程树中 下面的文件: 如果用的是M4内核,添加下面的定义:

2SK3019 中低压MOSFET 60V 100mA 双N通道 SOT-723封装

2SK3019小电流双N通道MOSFET,电压60V电流100mA,采用SOT-723封装形式。适用于低RDS (on)的高密度电池设计,压控小信号开关,坚固可靠,ESD保护。可应用便携式设备的负载开关,电池开关上。

探索 CodeWave低代码技术的魅力与应用

目录 前言1 低代码平台2 CodeWave简介3 CodeWave 的独特之处3.1 高保真还原交互视觉需求3.2 擅长复杂应用开发3.3 支持应用导出&独立部署3.4 金融级安全要求3.5 可集成性高3.6 可拓展性强 4 平台架构和核心功能4.1 数据模型设计4.2 页面设计4.3 逻辑设计4.4 流程设计4.5 接…

【STM32F103】TIM定时器PWM

定时器分类 STM32F1中除了互联型产品(STM32F103C8T6为64KB Flash 中容量产品),其余有8个定时器。 可以8个定时器分为高级,通用,基本三种。 高级定时器有两个,分别是TIM1和TIM8。 通用定时器有四个&…

SD-WAN:提升连锁零售企业异地组网稳定性

连锁零售企业往往拥有众多分布在不同地区的分支机构和零售店,为保证企业高效运转,各地区之间的网络连接必须稳定可靠。但基于各地网络基础设施的不同和网络延迟、带宽等限制,异地组网往往并不稳定。在这背景下,SD-WAN成为连锁零售…

频谱论文:空间频率插值的无线电地图 Space-Frequency-Interpolated Radio Map

#频谱# K. Sato, K. Suto, K. Inage, K. Adachi and T. Fujii, "Space-Frequency-Interpolated Radio Map," in IEEE Transactions on Vehicular Technology, vol. 70, no. 1, pp. 714-725, Jan. 2021, doi: 10.1109/TVT.2021.3049894. 东京理科大学&#xff0…

MBP的新拉力=800MT+凯越525+泛美?

MBP国内新兴品牌,可能部分车友了解,之前专门做欧洲市场的,米兰车展的时候它带来一款比较有意思的车型,型号:T502X,这个502和贝纳利的502关系不大。 据了解,车辆是由高金代工生产的,发动机就是高…

闲置树莓派(linux单片机)做NAS的最简单方案

闲置的树莓派其实可以做nas服务器使用。树莓派单片机5V2A,功耗大概10W。外置移动硬盘盒子12V2A 功耗大概24W。全加起来,功耗一小时30W,一天3角左右的运行成本,速率也可以,非常划算。(其他任何Linux单片机原…

2024年个人工作计划怎么写?新年待办计划这样写更方便

元旦的钟声还在耳边回响,2024年的新篇章已经开启。面对新的一年,我深知一个清晰、实用的个人工作计划是多么重要。它不仅是指引我前进的灯塔,更是我实现目标、提升效率的秘密武器。 但如何制定这样一个计划呢?在过去,…

边框渐变色+圆角

这两个同时写,圆角不会生效 li {width: 282px;height: 96px;margin-right: 20px;box-sizing: border-box;border: 1px solid transparent;background-image: linear-gradient(#fff, #fff),linear-gradient(to right, #8efd9f, #07cbfb);background-origin: border-b…

【C语言】作用域 和 生命周期

🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…

Sectigo企业的通配符证书续费

首先,我们要知道SSL证书是有期限的,通常SSL证书的有效期为一年,在SSL证书到期之前我们需要对其进行续费,从而延续SSL证书对网站的保护。Sectigo是中多的CA认证机构之一,申请速度快、性价比高,很多子域名站点…

如何用python新建一个文件,python怎么新建一个文件

大家好,小编来为大家解答以下问题,如何通过python新建一个文件中的文件,如何通过python新建一个文件夹并命名,现在让我们一起来看看吧! 文章目录 前言 1. 使用内置的open函数2. 使用with关键字3. 使用os模块总结零基础…