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 相关文章推荐
jquery中动态效果小结
Dec 16 Javascript
asp.net刷新本页面的六种方法总结
Jan 07 Javascript
使用javascript实现简单的选项卡切换
Jan 09 Javascript
理解javascript定时器中的setTimeout与setInterval
Feb 23 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
Aug 02 Javascript
Bootstrap树形菜单插件TreeView.js使用方法详解
Nov 01 Javascript
jQuery webuploader分片上传大文件
Nov 07 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
Dec 18 Javascript
Vue隐藏显示、只读实例代码
Jul 18 Javascript
一次Webpack配置文件的分离实战记录
Nov 30 Javascript
基于JavaScript伪随机正态分布代码实例
Nov 07 Javascript
javaScript 实现重复输出给定的字符串的常用方法小结
Feb 20 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 mssql 数据库分页SQL语句
2008/12/16 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
php使用正则表达式进行字符串搜索的方法
2015/03/23 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
php运行报错Call to undefined function curl_init()的最新解决方法
2016/11/20 PHP
Thinkphp事务操作实例(推荐)
2017/04/01 PHP
php异常处理捕获错误整理
2019/09/23 PHP
显示js对象所有属性和方法的函数
2009/10/16 Javascript
jquery操作HTML5 的data-*的用法实例分享
2014/08/17 Javascript
三种取消选中单选框radio的方法
2014/09/09 Javascript
jQuery弹出层插件Lightbox_me使用指南
2015/04/21 Javascript
jquery实现的美女拼图游戏实例
2015/05/04 Javascript
jQuery焦点图轮播特效代码分享(3款)
2015/09/05 Javascript
用JS实现轮播图效果(二)
2016/06/26 Javascript
火狐和ie下获取javascript 获取event的方法(推荐)
2016/11/26 Javascript
Angular中ng-bind和ng-model的区别实例详解
2017/04/10 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
微信小程序scroll-view组件实现滚动动画
2018/01/31 Javascript
微信小程序自定义多选事件的实现代码
2018/05/17 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
javascript 数组精简技巧小结
2020/02/26 Javascript
javascript 内存模型实例详解
2020/04/18 Javascript
[48:02]Ti4循环赛第三日 VG vs Liquid和NEWBEE vs DK
2014/07/12 DOTA
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
python学生管理系统
2019/01/30 Python
pytorch 实现张量tensor,图片,CPU,GPU,数组等的转换
2020/01/13 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
音乐专业应届生教师求职信
2013/11/04 职场文书
技术总监管理职责范本
2014/03/06 职场文书
毕业典礼主持词大全
2014/03/26 职场文书
幼儿教师师德师风演讲稿
2014/08/22 职场文书
市贸粮局召开党的群众路线教育实践活动总结大会新闻稿
2014/10/21 职场文书
学前班幼儿评语大全
2014/12/29 职场文书
运动会100米广播稿
2015/08/19 职场文书
django上传文件的三种方式
2021/04/29 Python
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python