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 相关文章推荐
Javascript 作用域使用说明
Aug 13 Javascript
动感效果的TAB选项卡jquery 插件
Jul 09 Javascript
jquery插件jTimer(jquery定时器)使用方法
Dec 23 Javascript
JavaScript知识点总结之如何提高性能
Jan 15 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
Jun 17 Javascript
如何防止INPUT按回车自动提交表单FORM
Dec 06 Javascript
vuejs如何配置less
Apr 25 Javascript
Vue父子组件之间的通信实例详解
Sep 28 Javascript
Vue中的$set的使用实例代码
Oct 08 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
Jun 07 Javascript
jquery插件开发模式实例详解
Jul 20 jQuery
javascript网页随机点名实现过程解析
Oct 15 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
一次编写,随处运行
2006/10/09 PHP
zen cart新进商品的随机排序修改方法
2010/09/10 PHP
PHP自定义大小验证码的方法详解
2013/06/07 PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
深入理解PHP内核(一)
2015/11/10 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
javascript Array.remove() 数组删除
2009/08/06 Javascript
jquery高效反选具体实现
2013/05/05 Javascript
安装使用Mongoose配合Node.js操作MongoDB的基础教程
2016/03/01 Javascript
详解JavaScript正则表达式之分组匹配及反向引用
2016/03/09 Javascript
zTree插件下拉树使用入门教程
2016/04/11 Javascript
JS获取IMG图片高宽的简单实例
2016/05/17 Javascript
Jquery针对tr td的一些实用操作方法(必看篇)
2016/10/05 Javascript
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
JavaScript鼠标拖拽事件详解
2020/04/03 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
Python 探针的实现原理
2016/04/23 Python
Django返回json数据用法示例
2016/09/18 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
python3.6利用pyinstall打包py为exe的操作实例
2018/10/31 Python
python3编写ThinkPHP命令执行Getshell的方法
2019/02/26 Python
500行代码使用python写个微信小游戏飞机大战游戏
2019/10/16 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
python dict乱码如何解决
2020/06/07 Python
Python如何使用input函数获取输入
2020/08/06 Python
美国领先的在线邮轮旅游公司:CruiseDirect
2018/06/07 全球购物
使用Vue.js和MJML创建响应式电子邮件
2021/03/23 Vue.js
师范生实习个人的自我评价
2013/09/28 职场文书
工商管理实习自我鉴定
2013/09/28 职场文书
给妈妈洗脚活动方案
2014/08/16 职场文书
2014年工会工作总结
2014/11/12 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
2015年信息中心工作总结
2015/05/25 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
python使用torch随机初始化参数
2022/03/22 Python