Typescript 中的 interface 和 type 到底有什么区别详解


Posted in Javascript onJune 18, 2019

interface VS type

大家使用 typescript 总会使用到 interface 和 type,官方规范 稍微说了下两者的区别

  • An interface can be named in an extends or implements clause, but a type alias for an object type literal cannot.
  • An interface can have multiple merged declarations, but a type alias for an object type literal cannot.

但是没有太具体的例子。

明人不说暗话,直接上区别。

相同点

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

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)

interface 和 type 都可以拓展,并且两者并不是相互独立的,也就是说 interface 可以 extends type, type 也可以 extends interface 。 虽然效果差不多,但是两者语法不同。

interface extends interface

interface Name { 
 name: string; 
}
interface User extends Name { 
 age: number; 
}

type extends type

type Name = { 
 name: string; 
}
type User = Name & { age: number };

interface extends type

type Name = { 
 name: string; 
}
interface User extends Name { 
 age: number; 
}

type extends 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<string, Person>; 
type Callback<T> = (data: T) => void; 
type Pair<T> = [T, T]; 
type Coordinates = Pair<number>; 
type Tree<T> = T | { left: Tree<T>, right: Tree<T> };

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 。其他更多详情参看 官方规范文档

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js实现iframe动态调整高度的代码
Jan 06 Javascript
利用JQuery和JS实现奇偶行背景颜色自定义效果
Nov 19 Javascript
Jquery+CSS3实现一款简洁大气带滑动效果的弹出层
May 15 Javascript
Jquery实现网页跳转或用命令打开指定网页的解决方法
Jul 09 Javascript
jQuery中:header选择器用法实例
Dec 29 Javascript
JS实现文字向下滚动完整实例
Feb 06 Javascript
node.js中debug模块的简单介绍与使用
Apr 25 Javascript
jquery实现图片放大点击切换
Jun 06 jQuery
基于VUE.JS的移动端框架Mint UI的使用
Oct 11 Javascript
仿京东快报向上滚动的实例
Dec 13 Javascript
koa2实现登录注册功能的示例代码
Dec 03 Javascript
基于node+websocket+html实现腾讯课堂聊天室聊天功能
Mar 04 Javascript
使用js在layui中实现上传图片压缩
Jun 18 #Javascript
jquery中为什么能用$操作
Jun 18 #jQuery
详解Vue3.0 前的 TypeScript 最佳入门实践
Jun 18 #Javascript
利用js-cookie实现前端设置缓存数据定时失效
Jun 18 #Javascript
vue中利用Promise封装jsonp并调取数据
Jun 18 #Javascript
实用Javascript调试技巧分享(小结)
Jun 18 #Javascript
Angular中innerHTML标签的样式不起作用的原因解析
Jun 18 #Javascript
You might like
十天学会php(1)
2006/10/09 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
利用PHP绘图函数实现简单验证码功能的方法
2016/10/18 PHP
PHP面向对象五大原则之里氏替换原则(LSP)详解
2018/04/08 PHP
use jscript List Installed Software
2007/06/11 Javascript
Jquery 基础学习笔记
2009/05/29 Javascript
jquery 学习之二 属性(html()与html(val))
2010/11/25 Javascript
js Event对象的5种坐标
2011/09/12 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
JS判断是否360安全浏览器极速内核的方法
2015/01/29 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
使用Chart.js图表库制作漂亮的响应式表单
2015/10/28 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
浅谈js的异步执行
2016/10/18 Javascript
JS实现的简单图片切换功能示例【测试可用】
2017/02/14 Javascript
JavaScript事件方法(实例讲解)
2017/06/27 Javascript
JavaScript简单实现的仿微博留言功能示例
2019/01/17 Javascript
适合前端Vue开发童鞋的跨平台Weex的使用详解
2019/10/16 Javascript
[00:49]完美世界DOTA2联赛10月28日开团时刻:随便打
2020/10/29 DOTA
Windows系统下安装Python的SSH模块教程
2015/02/05 Python
Python内存管理方式和垃圾回收算法解析
2017/11/11 Python
Python通过调用mysql存储过程实现更新数据功能示例
2018/04/03 Python
基于python指定包的安装路径方法
2018/10/27 Python
对python opencv 添加文字 cv2.putText 的各参数介绍
2018/12/05 Python
python numpy数组中的复制知识解析
2020/02/03 Python
Python栈的实现方法示例【列表、单链表】
2020/02/22 Python
使用python计算三角形的斜边例子
2020/04/15 Python
Tensorflow与Keras自适应使用显存方式
2020/06/22 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
室内设计专业个人的自我评价
2013/10/19 职场文书
关于读书的演讲稿1000字
2014/08/27 职场文书
中学生社区服务活动报告
2015/02/05 职场文书
医院合作意向书范本
2015/05/08 职场文书
Win11 S Mode版本泄露 正式上线后叫做Windows 11 SE
2021/11/21 数码科技
Windows11性能真的上涨35%? 桌面酷睿i9实测结果公开
2021/11/21 数码科技