相同点

都可以描述一个对象或者函数

interface

interface User {

name: string

age: number

}

interface SetUser {

(name: string, age: number): void;

}

type

type User = {

name: string

age: number

};

type SetUser = (name: string, age: number): void;

拓展(extends)与 交叉类型(Intersection Types)

interface 可以 extends, 但 type 是不允许 extends 和 implement 的,但是 type 缺可以通过交叉类型 实现 interface 的 extend 行为,并且两者并不是相互独立的,也就是说 interface 可以 extends type, type 也可以 与 interface 类型 交叉 。

虽然效果差不多,但是两者语法不同。

interface extends interface

interface Name {

name: string;

}

interface User extends Name {

age: number;

}

type 与 type 交叉

type Name = {

name: string;

}

type User = Name & { age: number };

interface extends type

type Name = {

name: string;

}

interface User extends Name {

age: number;

}

type 与 interface 交叉

interface Name {

name: string;

}

type User = Name & {

age: number;

}

区别

type 可以而 interface 不行

type 可以声明基本类型别名,联合类型,元组等类型

// 基本类型别名

type Name = string

// 联合类型

interface Dog {

wong();

}

interface Cat {

miao();

}

type Pet = Dog | Cat

// 具体定义数组每个位置的类型

type PetList = [Dog, Pet]

type 语句中还可以使用 typeof 获取实例的 类型进行赋值

/ 当你想获取一个变量的类型时,使用 typeof

let div = document.createElement('div');

type B = typeof div

其他骚操作

type StringOrNumber = string | number;

type Text = string | { text: string };

type NameLookup = Dictionary;

type Callback = (data: T) => void;

type Pair = [T, T];

type Coordinates = Pair;

type Tree = T | { left: Tree, right: Tree };

interface 可以而 type 不行

interface 能够声明合并

interface User {

name: string

age: number

}

interface User {

sex: string

}

/*

User 接口为 {

name: string

age: number

sex: string

}

*/

总结

一般来说,如果不清楚什么时候用interface/type,能用 interface 实现,就用 interface , 如果不能就用 type 。

ts中文官方文档:https://www.tslang.cn/docs/home.html

typescript和 java区别_typescript中interface和type的区别相关推荐

  1. TypeScript中interface 与 type的区别,你真的懂吗?

    在写 ts 相关代码的过程中,总能看到 interface 和 type 的身影.它们的作用好像都一样的,相同的功能用哪一个都可以实现,也都很好用,所以也很少去真正的理解它们之间到底有啥区别, 分别在 ...

  2. 【Java】泛型中 extends 和 super 的区别?

    <? extends T>和<? super T>是Java泛型中的"通配符(Wildcards)"和"边界(Bounds)"的概念. ...

  3. 【java】深入理解Java JVM虚拟机中init和clinit的区别

    1.概述 转载并且补充:深入理解Java JVM虚拟机中init和clinit的区别 原创 之所以来转载一下,是因为,有个学弟问了这个问题 这个知识点,回顾起来应该是我看 深入理解Java JVM虚拟 ...

  4. 20200927:Java和Cpp中栈与队列的区别

    Java和Cpp中栈与队列的区别 题目 思路与算法 代码实现 对比分析两种语言中栈和队列的区别 题目 1.225. 用队列实现栈 2.232. 用栈实现队列 3.155. 最小栈 思路与算法 三道简单 ...

  5. ajax的post跟get区别,Ajax中post与get的区别

    get和post都是向服务器发送一种请求,只是发送机制不同 . 1. GET可以通过在请求URL上添加请求参数, 而POST请求则是作为HTTP消息的实体内容发送给WEB服务器. 2. get方式请求 ...

  6. TypeScript 里 interface 和 type 的区别

    StackOverflow 上的讨论链接 Interface vs Type alias in TypeScript 2.7 Differences Between Type Aliases and ...

  7. Java中string与String区别_JAVA中String与StringBuffer的区别

    JAVA中String与StringBuffer的区别 2009-12-3文字大小:大中小 在java中有3个类来负责字符的操作. 1.Character 是执行 单个字符操作的, 2.String ...

  8. java中的成员变量和局部变量的区别_java中成员变量与局部变量区别分析

    本文实例分析了java中成员变量与局部变量区别.分享给大家供大家参考.具体分析如下: 成员变量:在这个类里定义的私有变量,属于这个类. 创建以及使用成员变量 public class Person { ...

  9. java long 区别_java中long和int的区别

    java中long和int的区别 发布时间:2020-06-26 15:37:48 来源:亿速云 阅读:191 作者:Leah 这篇文章将为大家详细讲解有关java中long和int的区别,文章内容质 ...

最新文章

  1. AppBaseJs 类库 网上常用的javascript函数及其他js类库写的
  2. CTFshow 命令执行 web74
  3. rdp协议打开 windows_ubuntu客户端使用RDP协议连接windows服务器
  4. boost::math模块使用二项分布复制 NAG 库调用的测试程序
  5. SAP BTP 上使用 Mobile Back-End Tools(MBT)进行全栈开发的方法概述
  6. python选项卡中文详细说明_pycharm窗口选项卡管理
  7. 中国石油大学(华东)计算机科学与技术,2017年中国石油大学(华东)函授本科计算机科学与技术专业...
  8. 第一百八十四节,jQuery-UI,验证注册表单
  9. 可视化分析:洞见数据的秘诀
  10. Ubuntu E: Sub-process /usr/bin/dpkg returned an error code (1)
  11. python基础--函数1
  12. SPSS数据插补方法
  13. picsart旧版本_picsart 2016旧版本下载-picsart 2016版本下载v5.25.4 安卓中文版-2265安卓网...
  14. 中小型城市商业银行数字化转型实践(一)整体技术架构转型(双态IT)
  15. android硬盘加密方法,Android硬盘加密工具
  16. TopJUI Combobox onSelect 事件失效BUG
  17. 火影忍者ol HTML5,火影忍者OL-官方网站-腾讯游戏
  18. Python爬虫报错 ImportError: cannot import name Morsel
  19. 矩阵分析与应用-1.10-Hadamard积与Kronecker积
  20. $ 8 : gets函数与puts函数

热门文章

  1. windows永久添加路由
  2. html和css动画效果,css过渡和css动画的区别是什么?
  3. 微服务实现不同登陆_微服务网关——实现篇
  4. python接口编程_Python 中的面向接口编程
  5. python selenium-9 grid模式
  6. ASP.NET-EF基础知识
  7. 转载:.NET Memory Leak: XmlSerializing your way to a Memory Leak
  8. UI: 自定义 UISegmentedControl
  9. cocos2d里面如何实现MVC(一)
  10. 提升速度与精度,FedReg: 减轻灾难性遗忘加速联邦收敛(ICLR 2022)