TypeScript中的type与interface到底有什么区别,你搞懂了吗?

108 阅读2分钟

“开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 1 天,点击查看活动详情

前言

学会了typeScript之后疑惑了很久,定义一个接口都可以使用type和interface,那么这两者到底有什么不同呢?在编写代码的时候到底应该怎么使用呢?。下面我将深入剖析这两者的不同与相同,希望对大家有所帮助同时欢迎讨论指出问题!

1.首先来定义一个接口

当一个对象类型被多次使用时,一般会使用接口来描述对象的类型,达到复用

1.用interface 关键字声明接口

interface Iperson {
 name: string
 age: number
}   
let person: Iperson = {
 name: 'ZZ',
 age: 18
}

2.用type 关键字声明接口

type Iperson = {
 name: string
 age: number
}
let person: Iperson = {
 name: 'ZZ',
 age: 18
}

2.相同点

1.type 与interface 都可以用来描述一个对象或者函数

type Iperson = {
 name: string
 age: number
}
interface Iperson {
 name: string
 age: number
} 

2.interface与type都可以拓展,并且两者并不不是相互独⽴立的。interface 可以 extends type, type 也可以 extends interface。但是两者的语法有点不同

interface Name {
    name: string;  
  }
interface User extends Name {
    age: number;
  }
  
  
type Name = {
    name: string;
  }
type User = Name & { age: number  };

3.不同点

1.type 可以声明基本类型,联合类型,元祖等。type语句中还可以使用typeof获取实例的类型进行赋值

type Name = string // 基础类型
type Name = stringnumber //联合类型
type Arr =[string,number] //元祖

2.interface 可以声明合并,但type不可以

interface User={
  name:string;
  age:number
}

interface User={
  like:string
}

最后 User这个接口的结果是

interface User={
  name:string;
  age:numberlike:string
}

最后总结:当遇到不知道用type还是interface的情况下,能用interface实现就用interface实现,不行了再用type。

结束语

希望大家能够喜欢我的文章,我真的很用心在写,也希望通过文章认识更多志同道合的朋友。

最后伙伴们,如果喜欢我的可以给点一个小小的赞👍或者关注➕都是对我最大的支持。