本文主要是介绍【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 中,interface
和 type
可以相互继承,具体如下:
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
可以继承interface
和type
,通过extends
实现。type
可以继承interface
和type
,通过交叉类型&
实现。
三、区别
(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的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!