TS中 type|interface的区别
创始人
2024-06-02 17:29:09
0

1. type:创建类型别名,不仅可以用来表示基本类型,还可以表示对象类型,联合类型,元组和交集

type username = string //基本类型
type userId = string | number //联合类型
type arr = number[]
​
//对象类型
type Person = {id:userIdname:userNameage:number
}
//泛型
type Tree = { value:T };
​
const user: Person = {id :'fd',
}

2. 接口是命名数据结构(例如对象)的另一种方法;与Type不同,Interface仅限于描述对象类型

接口的声明语法也不同类型别名的生命语法,让我们将上面的类型别名 Person 重写为接口声明:

interface Person{id:userIdname:userNameage:number
}

两种相似之处:

都可以描述Object 和Function,但语法不同

type:type Point = {x: number;y: number;
};
​
type SetPoint = (x: number, y: number) => void;
interfaceinterface Point {x: number;y: number;
}
​
interface SetPoint {(x: number, y: number): void;
}

二者都可以被继承

interfacetype 都可以继承。

另一个值得注意的是,接口和类型别名并不互斥。类型别名可以继承接口,反之亦然。只是在实现形式上,稍微有些差别。

二者区别

  1. type可以定义基本类型别名, 但是interface无法定义

  1. type可以声明联合类型, 但是interface无法定义

  1. type可以声明 元组类型:但是interface无法定义

  1. interface 可以声明合并,但是type无法定义,用type会报错 如果你多次声明一个同名的接口,TypeScript 会将它们合并到一个声明中,并将它们视为一个接口。这称为声明合并

总结

官方推荐用 interface,其他无法满足需求的情况下用 type

但其实,因为 联合类型 和 交叉类型 是很常用的,所以避免不了大量使用 type 的场景,一些复杂类型也需要通过组装后形成类型别名来使用。

所以,如果想保持代码统一,还是可选择使用 type。通过上面的对比,类型别名 其实可涵盖 interface 的大部分场景。

对于 React 组件中 propsstate,使用 type ,这样能够保证使用组件的地方不能随意在上面添加属性。如果有自定义需求,可通过 HOC二次封装。

编写三方库时使用interface,其更加灵活自动的类型合并可应对未知的复杂使用场景。

相关内容

热门资讯

前端-session、jwt 目录:   (1)session (2&#x...
linux入门---制作进度条 了解缓冲区 我们首先来看看下面的操作: 我们首先创建了一个文件并在这个文件里面添加了...
关于测试,我发现了哪些新大陆 关于测试 平常也只是听说过一些关于测试的术语,但并没有使用过测试工具。偶然看到编程老师...
前缀和与对数器与二分法 1. 前缀和 假设有一个数组,我们想大量频繁的去访问L到R这个区间的和,...
nodejs:本地安装nvm实... 一、背景-使用不同版本node的原因 vue3+ts、nuxt3版本,node...
JAVA集合知识整理 Java集合知识整理 HashMap相关 HashMap的底层数据结构:jdk1.8之...
无刷直流电机介绍及单片机控制实... 无刷直流电机介绍及单片机控制实例前言基本概念优势与劣势使用寿命基本结构使用单片机控制实例电子调速器&...
fwdiary(2) dp2 1.传纸条  AcWing 275. 传纸条 - AcWing 走两条路,走一条最大的...
常用的DOS命令 常用的DOS命令 DOS(Disk Operating System,磁...
<C++> 类和对象(下) 1.const成员函数将const修饰的“成员函数”称之为const成员函数,cons...