type 和 interface 的区别是什么?
官方给出的文档说明:
组合方式:interface 使用 extends 来实现继承,type 使用 & 来实现联合类型。
interface
interface Animal {
name: string
}
interface Bear extends Animal {
honey: boolean
}
const bear = getBear()
bear.name
bear.honeytype
type Animal = {
name: string
}
type Bear = Animal & {
honey: boolean
}
const bear = getBear();
bear.name;
bear.honey;扩展方式:interface 可以重复声明用来扩展,type 一个类型只能声明一次
interface
interface Window {
title: string
}
interface Window {
ts: TypeScriptAPI
}
const src = 'const a = "Hello World"';
window.ts.transpileModule(src, {});type
type Window = {
title: string
}
type Window = {
ts: TypeScriptAPI
}
// Error: Duplicate identifier 'Window'.范围不同:type 适用于基本类型,interface 一般不行。
命名方式:interface 会创建新的类型名,type 只是创建类型别名,并没有新创建类型。
其他……建议搜一下博客。
相同点
两者都可以用来描述对象或函数的类型,但是语法不同。
interface
:接口是一系列抽象方法的声明,第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法
interface IPerson {
firstName: string
lastName: string
sayHi: () => string
}
var customer: IPerson = {
firstName: 'Tom',
lastName: 'Hanks',
sayHi: string => {
return 'Hi there'
}
}
console.log('Customer 对象 ')
console.log(customer.firstName)
console.log(customer.lastName)
console.log(customer.sayHi())type
:联合类型可以通过|
将变量设置多种类型,赋值时可以根据设置的类型来赋值。
var val: string | number
val = 12
console.log('数字为 ' + val)
val = 'Runoob'
console.log('字符串为 ' + val)都允许继承(extends)
interface extends interface
interface Name {
name: string
}
interface User extends Name {
age: number
}type
与type
相交
type Name = {
name: string
}
type User = Name & { age: number }interface extends type
type Name = {
name: string
}
interface User extends Name {
age: number
}type
与interface
相交
interface Name {
name: string
}
type User = Name & {
age: number
}
不同点
- type 可以而 interface 不行 type 可以声明基本类型别名,联合类型,元组等类型
- interface 可以而 type 不行 interface 能够声明合并