【TS高频面试题】interface与type的区别

2024-09-06 12:44

本文主要是介绍【TS高频面试题】interface与type的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

参考文章

一、基本概念

1. type(类型别名)

用来给一个类型起新名字,使用 type 创建类型别名。

2. interface(接口)

专门用于定义对象的结构(比如属性和方法)

二、相同点

(1)都可以描述对象或函数

interface

interface User {name: stringage: number
}interface SetUser {(name: string, age: number): void;
}

type

type User = {name: stringage: number
};type SetUser = (name: string, age: number)=> void;

(2)都允许继承

在 TypeScript 中,interface 和 type 可以相互继承。
在 TypeScript 中,interfacetype 可以相互继承,具体如下:

1. interface 可以继承 interface

这是最常见的用法。一个 interface 可以通过 extends 继承另一个 interface

interface Person {name: string;
}interface Employee extends Person {employeeId: number;
}const emp: Employee = {name: "Alice",employeeId: 123
};

2. interface 可以继承 type

interface 也可以通过 extends 继承一个 type,因为 type 也可以定义对象结构。

type Person = {name: string;
};interface Employee extends Person {employeeId: number;
}const emp: Employee = {name: "Bob",employeeId: 456
};

3. type 可以继承 interface

type 可以通过交叉类型(&)继承 interface。交叉类型会将多个类型合并为一个新类型。

interface Person {name: string;
}type Employee = Person & {employeeId: number;
};const emp: Employee = {name: "Charlie",employeeId: 789
};

4. type 可以继承 type

type 可以通过交叉类型继承另一个 type

type Person = {name: string;
};type Employee = Person & {employeeId: number;
};const emp: Employee = {name: "David",employeeId: 101
};
  • interface 可以继承 interfacetype,通过 extends 实现。
  • type 可以继承 interfacetype,通过交叉类型 & 实现。

三、区别

(1) 可声明的类型

type:不仅可以用来表示对象类型,还可以用来表示基本类型联合类型元组和交叉类型

type userName = string;   // 基本类型
type userMsg = string | number;   // 联合类型// 对象类型
type Person = {name: userName;age: number;
};// 使用Person类型
let user: Person = {name: "leo",age: 18
};//  交叉类型 例子:
// 交叉类型将多个类型组合成一个类型,这个类型必须满足所有被组合的类型。对于复杂对象或组合类型的场景非常有用。
type Person = {name: string;age: number;
};type Employee = {employeeId: number;position: string;
};type Developer = Person & Employee; // 交叉类型const dev: Developer = {name: "Alice",age: 28,employeeId: 123,position: "Frontend Developer"
};

interface:仅限于描述对象类型和函数

interface User {name: string;age: number;sayHello: () => void;
}const user1: User = {name: "Alice",age: 25,sayHello: () => console.log("Hello!")
};

(2)interface支持声明合并,type不支持会报错

或者总结成:

  • type 可以做到而 interface 不能做到:可以用来表示基本类型联合类型元组和交叉类型
  • interface 可以做到而 type 不能做到:interface 可以声明合并。如果使用type,就会报 重复定义 的警告
interface test {name: string
}
interface test {age: number
}/*test实际为 {name: stringage: number}
*/

(3)扩展(继承)的的实现方法

interface是通过extends实现的,type是通过&(交叉类型)实现的。

这篇关于【TS高频面试题】interface与type的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142042

相关文章

java中不同版本JSONObject区别小结

《java中不同版本JSONObject区别小结》本文主要介绍了java中不同版本JSONObject区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1. FastjsON2. Jackson3. Gson4. org.json6. 总结在Jav

数据库使用之union、union all、各种join的用法区别解析

《数据库使用之union、unionall、各种join的用法区别解析》:本文主要介绍SQL中的Union和UnionAll的区别,包括去重与否以及使用时的注意事项,还详细解释了Join关键字,... 目录一、Union 和Union All1、区别:2、注意点:3、具体举例二、Join关键字的区别&php

java中的HashSet与 == 和 equals的区别示例解析

《java中的HashSet与==和equals的区别示例解析》HashSet是Java中基于哈希表实现的集合类,特点包括:元素唯一、无序和可包含null,本文给大家介绍java中的HashSe... 目录什么是HashSetHashSet 的主要特点是HashSet 的常用方法hasSet存储为啥是无序的

解决Spring运行时报错:Consider defining a bean of type ‘xxx.xxx.xxx.Xxx‘ in your configuration

《解决Spring运行时报错:Considerdefiningabeanoftype‘xxx.xxx.xxx.Xxx‘inyourconfiguration》该文章主要讲述了在使用S... 目录问题分析解决方案总结问题Description:Parameter 0 of constructor in x

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

Python中@classmethod和@staticmethod的区别

《Python中@classmethod和@staticmethod的区别》本文主要介绍了Python中@classmethod和@staticmethod的区别,文中通过示例代码介绍的非常详细,对大... 目录1.@classmethod2.@staticmethod3.例子1.@classmethod

Golan中 new() 、 make() 和简短声明符的区别和使用

《Golan中new()、make()和简短声明符的区别和使用》Go语言中的new()、make()和简短声明符的区别和使用,new()用于分配内存并返回指针,make()用于初始化切片、映射... 详细介绍golang的new() 、 make() 和简短声明符的区别和使用。文章目录 `new()`

Python中json文件和jsonl文件的区别小结

《Python中json文件和jsonl文件的区别小结》本文主要介绍了JSON和JSONL两种文件格式的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下... 众所周知,jsON 文件是使用php JSON(JavaScripythonpt Object No

结构体和联合体的区别及说明

《结构体和联合体的区别及说明》文章主要介绍了C语言中的结构体和联合体,结构体是一种自定义的复合数据类型,可以包含多个成员,每个成员可以是不同的数据类型,联合体是一种特殊的数据结构,可以在内存中共享同一... 目录结构体和联合体的区别1. 结构体(Struct)2. 联合体(Union)3. 联合体与结构体的

什么是 Ubuntu LTS?Ubuntu LTS和普通版本区别对比

《什么是UbuntuLTS?UbuntuLTS和普通版本区别对比》UbuntuLTS是Ubuntu操作系统的一个特殊版本,旨在提供更长时间的支持和稳定性,与常规的Ubuntu版本相比,LTS版... 如果你正打算安装 Ubuntu 系统,可能会被「LTS 版本」和「普通版本」给搞得一头雾水吧?尤其是对于刚入