下班前几分钟,我弄懂了 type 与 interface 的区别,年薪60W必备

36 阅读3分钟

name: "leo",

age: 18

};

2、interface(接口)

接口是命名数据结构(例如对象)的另一种方式;与 type 不同,interface 仅限于描述对象类型。接口的声明语法也不同于类型别名的声明语法。如将上面的类型别名 Person 重写为接口声明如下所示。

interface Person {

name: userName;

age: number;

}

二、相同之处


1、都可以用来定义对象和函数

type

type Position = {

x: number;

y: number;

};

type SetPosition = (x: number, y: number) => void;

interface

interface Position {

x: number;

y: number;

}

interface SetPosition {

(x: number, y: number): void;

}

2、都可以实现继承

type 和 interface 并不互斥。type 可以继承 interface,反之亦然。只是在实现形式上,稍微有些区别。

type

// type 继承 type

type Person {

name: string

}

type Student = Person & { stuId: number }

// type 继承 interface

interface Person {

name: string

}

type Student = Person & { stuId: number }

interface

// interface 继承 interface

interface Person {

name: string

}

interface Student extends Person { stuId: number }

// interface 继承 type

type Person {

name: string

}

interface Student extends Person { stuId: number }

小结:对于 interface 来说,继承是通过 extends 实现的;而 type 是通过 & 来实现的,也可以叫做交叉类型。 

三、不同之处


1、type 可以做到而 interface 不能做到

type 可以声明基本类型

type userName = string;

type 可以声明联合类型

type userMsg = string | number;

type 可以声明元组类型

type Data = [number, string];

type 可以通过 typeof 操作符来声明

type myType = typeof someObj;

2、interface 可以做到而 type 不能做到

interface 可以声明合并

interface test {

name: string

}

interface test {

age: number

}

/*

test实际为 {

name: string

age: number

}

*/

如果是 type 的话,就会报重复定义的警告,因此是无法实现声明合并的。

四、使用建议


1、官方推荐使用 interface,其他无法满足需求的情况下用 type。但是因为联合类型交叉类型是比较常用的,所以避免不了大量使用 type 的场景,一些复杂类型也需要通过组装后形成类型别名来使用。

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

3、对于 React 组件中 props 及 state,推荐使用 type,这样能够保证使用组件的地方不能随意在上面添加属性。如果有自定义需求,可通过 HOC(高阶组件)二次封装。

总结一下

面试前要精心做好准备,简历上写的知识点和原理都需要准备好,项目上多想想难点和亮点,这是面试时能和别人不一样的地方。

还有就是表现出自己的谦虚好学,以及对于未来持续进阶的规划,企业招人更偏爱稳定的人。

万事开头难,但是程序员这一条路坚持几年后发展空间还是非常大的,一切重在坚持。

为了帮助大家更好更高效的准备面试,特别整理了《前端工程师面试手册》电子稿文件。

前端面试题汇总

开源分享:docs.qq.com/doc/DSmRnRG…