iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >typescript中type和interface的区别有哪些
  • 236
分享到

typescript中type和interface的区别有哪些

2024-04-02 19:04:59 236人浏览 安东尼
摘要

目录前言type和interface的相同点type和interface的不同点结语如何选择 Interface 、 Type总结前言 在typescript里面,有两个概念十分容易

前言

typescript里面,有两个概念十分容易混淆,那便是 typeinterface,它俩都可以用来表示 接口,但是实际使用上会存在一些差异,因此本篇文章就准备聊聊它俩,彻底弄清它俩的联系与区别,废话不多说,开搞!

type和interface的相同点

在我看来,它俩就是对 接口定义 的两种不同形式,目的都是一样的,都是用来定义 对象 或者 函数 的形状,示例如下

    interface example {
        name: string
        age: number
    }
    interface exampleFunc {
        (name:string,age:number): void
    }
    
    
    type example = {
        name: string
        age: number
    }
    type example = (name:string,age:number) => void

它俩也支持 继承,并且不是独立的,而是可以 互相 继承,只是具体的形式稍有差别

    type exampleType1 = {
        name: string
    }
    interface exampleInterface1 {
        name: string
    }
    
    
    type exampleType2 = exampleType1 & {
        age: number
    }
    type exampleType2 = exampleInterface1 & {
        age: number
    }
    interface exampleInterface2 extends exampleType1 {
        age: number
    }
    interface exampleInterface2 extends exampleInterface1 {
        age: number
    }

可以看到对于interface来说,继承是通过 extends 实现的,而type的话是通过 & 来实现的,也可以叫做 交叉类型

type和interface的不同点

首先聊聊type可以做到,但interface不能做到的事情

  • type可以定义 基本类型的别名,如 type myString = string
  • type可以通过 typeof 操作符来定义,如 type myType = typeof someObj
  • type可以申明 联合类型,如 type uNIOnType = myType1 | myType2
  • type可以申明 元组类型,如 type yuanzu = [myType1, myType2]

接下来聊聊interface可以做到,但是type不可以做到的事情

  • interface可以 声明合并,示例如下

        interface test {
            name: string
        }
        interface test {
            age: number
        }
        
        

    这种情况下,如果是type的话,就会是 覆盖 的效果,始终只有最后一个type生效

结语

其实在typescript里,还有很多容易搞混淆的概念,如 extendsimplements 等,还有一些高级概念,如 泛型。这些都是在ts里必知必会的东西,因此一定要细抠这些知识点

ts给我们的代码带来健壮性的同时,也引入了更多的概念和知识,因此需要我们不断地学习。在今后我也准备多输出一些关于ts的文章,加深自己对于ts的理解,同时也可以帮助到喜欢看我文章的朋友,好啦,就写到这里啦,over!

如何选择 Interface 、 Type

虽然 官方 中说几乎接口的所有特性都可以通过类型别名来实现,但建议优先选择接口,接口满足不了再使用类型别名,在 typescript 官网 Preferring Interfaces Over Interps 有说明,具体内容如下:

大多数时候,对象类型的简单类型别名的作用与接口非常相似

interface Foo { prop: string }
 
type Bar = { prop: string };

但是,一旦你需要组合两个或多个类型来实现其他类型时,你就可以选择使用接口扩展这些类型,或者使用类型别名将它们交叉在一个中(交叉类型),这就是差异开始的时候。

  • 接口创建一个单一的平面对象类型来检测属性冲突,这通常很重要!  而交叉类型只是递归的进行属性合并,在某种情况下可能产生 never 类型
  • 接口也始终显示得更好,而交叉类型做为其他交叉类型的一部分时,直观上表现不出来,还是会认为是不同基本类型的组合。
  • 接口之间的类型关系会被缓存,而交叉类型会被看成组合起来的一个整体。
  • 最后一个值得注意的区别是,在检查到目标类型之前会先检查每一个组分。

出于这个原因,建议使用接口/扩展扩展类型而不是创建交叉类型。

- type Foo = Bar & Baz & {
-     someProp: string;
- }
+ interface Foo extends Bar, Baz {
+     someProp: string;
+ }

简单的说,接口更加符合 javascript 对象的工作方式,简单的说明下,当出现属性冲突时:

// 接口扩展
interface Sister {
    sex: number;
}
 
interface SisterAn extends Sister {
    sex: string;
}
// index.ts(5,11): error TS2430: Interface 'SisterAn' incorrectly extends interface 'Sister'.
//  Types of property 'sex' are incompatible.
//    Type 'string' is not assignable to type 'number'.
// 交叉类型
type Sister1 = {
    sex: number;
}
 
type Sister2 = {
    sex: string;
}
 
type SisterAn = Sister1 & Sister2;
// 不报错,此时的 SisterAn 是一个'number & string'类型,也就是 never

总结

到此这篇关于typescript中type和interface区别的文章就介绍到这了,更多相关typescript type和interface区别内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: typescript中type和interface的区别有哪些

本文链接: https://www.lsjlt.com/news/138394.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • typescript中type和interface的区别有哪些
    目录前言type和interface的相同点type和interface的不同点结语如何选择 Interface 、 Type总结前言 在typescript里面,有两个概念十分容易...
    99+
    2024-04-02
  • TypeScript中interface和type间的区别有哪些
    这篇文章主要讲解了“TypeScript中interface和type间的区别有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“TypeScript中interface和type间的区别有...
    99+
    2023-06-05
  • TypeScript中interface和type间的区别是什么
    这篇文章主要介绍“TypeScript中interface和type间的区别是什么”,在日常操作中,相信很多人在TypeScript中interface和type间的区别是什么问题上存在疑惑,小编查阅了各式...
    99+
    2024-04-02
  • 详解TypeScript中type与interface的区别
    目录类型别名 type接口 interfaceinterface和type的相似之处都可以描述 Object和FunctionTypeInterface二者都可以被继承interfa...
    99+
    2024-04-02
  • TypeScript中type和interface的区别及注意事项
    目录前言概念typeinterface异同点不同点相同点补充:Ts中type和interface定义类型扩展类型的方法总结前言 在 TS 中,type 和 interface相似,都...
    99+
    2022-11-13
    ts type interface ts type interface区别 ts type关键字
  • TS中interface和type的区别
    在 TypeScript 中,`interface` 和 `type` 都用来定义自定义类型。它们有一些相似之处,但也有一些区别。1...
    99+
    2023-09-22
    TS
  • javascript和typescript的区别有哪些
    这篇“javascript和typescript的区别有哪些”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“javascript和typescript的区别有哪些”,小编整理了以下知识点,请大家...
    99+
    2023-06-06
  • TypeScript中unknown和any的区别有哪些
    这篇文章主要介绍“TypeScript中unknown和any的区别有哪些”,在日常操作中,相信很多人在TypeScript中unknown和any的区别有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单...
    99+
    2024-04-02
  • typescript和es6有哪些区别
    本文小编为大家详细介绍“typescript和es6有哪些区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“typescript和es6有哪些区别”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。区别:1、type...
    99+
    2023-07-05
  • CSS3中:nth-child和:nth-of-type的区别有哪些
    这篇文章主要介绍了CSS3中:nth-child和:nth-of-type的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。:nth...
    99+
    2024-04-02
  • css中first-of-type和first child的区别有哪些
    这篇文章主要介绍了css中first-of-type和first child的区别有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。  ...
    99+
    2024-04-02
  • TypeScript接口和类型有哪些区别
    今天小编给大家分享的是TypeScript接口和类型有哪些区别,相信很多人都不太了解,为了让大家更加了解,所以给大家总结了以下内容,一起往下看吧。一定会有所收获的哦。目录接口(interface)类型(type)interface vs t...
    99+
    2023-07-06
  • typescript跟es6有哪些区别
    小编给大家分享一下typescript跟es6有哪些区别,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧! 区别:1、TypeScript支持所有原始数据类型,而E...
    99+
    2024-04-02
  • TypeScript中正确使用interface和type的方法实例
    目录前言interface type 附:interface和type不同点总结前言 interface 和 type 都是用来定义类型,可以理解定义 shape ,那么 shape...
    99+
    2024-04-02
  • TypeScript中import type与import的区别详析
    目录背景import type vs import使用 import type 的好处参考链接总结背景 这周遇到了一个比较奇怪的问题:如何在 TypeScript 中根据某个 enu...
    99+
    2024-04-02
  • js中==和===的区别有哪些
    这篇文章将为大家详细讲解有关js中==和===的区别有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称为JavaScri...
    99+
    2023-06-15
  • Kotlin中?和!!的区别有哪些
    这篇文章给大家分享的是有关Kotlin中和!!的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。前言很多同学刚上手使用Kotlin知道它有针对Java NullPointerException的管理,而在...
    99+
    2023-06-14
  • Numpy.array中[:]和[::]的区别有哪些
    小编给大家分享一下Numpy.array中[:]和[::]的区别有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!array([:])>>>&...
    99+
    2023-06-15
  • mysql中:=和=有哪些区别
    这篇文章主要介绍了mysql中:=和=有哪些区别,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。:=和=的区别= 只有在set和update时...
    99+
    2024-04-02
  • TypeScript中的class和interface怎么用
    这篇文章主要介绍了TypeScript中的class和interface怎么用的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇TypeScript中的class和interface怎么用文章都会有所收获,下面我们...
    99+
    2023-06-27
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作