十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
interface用于描述对象的形状和结构,可以给数据增加类型,而且方便进行复用。而type是通过别名进行重新定义类型的,类型别名指的是为类型创建新名称,需要注意的是,我们并没有定义一个新类型。两者是对接口定义的两种不同形式,目的都是在于定义对象的形状和结构。

但是,两者还是有些许差别:
interface ISum {
    (num1: number, num2: number):number
}
const sum: ISum = (num1,num2)=>{
    return num1+num2
}
type TSum = (num1: number, num2: number)=>number
const sum2: TSum = (num1,num2)=>{
    return num1+num2
}interface IUser{
    name:string
    age:number
}
interface IStudent{
    university: string
}
// Error: 不能使用interface进行联合类型,不存在interface IPerson = IUser | IStudent;
type TPerson = IUser | IStudent;type TPersonA = {
    name: string
}
type TPersonB = {
    age: number
}
// 交集
type PartialPerson = TPersonA & TPersonB;
// 并集 联合类型
type PartialPerson = TPersonA | TPersonB;对于接口上没有定义的属性,可以使用以下方法进行声明:
interface IPerson{
    name:string;
    age:number;
}
const pingping: IPerson = {
    name:"pingping",
    age:18,
    address:"北京"
} as IPersoninterface IPerson{
    name:string;
    age:number;
}
interface IUser extends IPerson{
    address:string
}
const pingping: IUser = {
    name:"pingping",
    age:18,
    address:"北京"
}interface IPerson{
    name:string;
    age:number;
    address?: string;
}
const pingping: IPerson = {
    name:"pingping",
    age:18,
    address:"北京"
}interface IPerson{
    name:string;
    age:number;
    [key: string]: any;
}
const pingping: IPerson = {
    name:"pingping",
    age:18,
    address:"北京"
}interface IPerson{
    name:string
    age:number
}
type TPerson = {
    name:string
    age:number
}
interface IStudent extends IPerson{
    university:string
}
interface IStudent extends TPerson{
    university:string
}
type TStudent = TPerson & {
    university:string
}
type TStudent = IPerson & {
    university:string
}
interface IPerson {
    name:string
    age:number
}
class User implements IPerson {
    name = "pingping";
    age = 18;
}
type TPerson = {
    name:string
    age:number
};
class User implements TPerson {
    name = "pingping";
    age = 18;
}
type PartialPerson = { name: string } | { age: number };
// A class can only implement an object type or 
// intersection of object types with statically known members.
class SomePartialPerson implements PartialPerson { // Error
    name = "pingping";
    age = 18;
}interface IPerson{
    name: string
}
interface IPerson{
    age: number
}
const user: IPerson = {
    name: "pingping",
    age: 18
}type TPerson = [name: string, age: number];
我们没有办法使用接口声明元组。不过,我们可以在接口内部使用元组
interface IPerson{
    user: [name: string, age: number]
}在typescript里,还有很多容易搞混淆的概念,interface和type是最典型的,目的都是实现对象的类型和结构定义,但是又有些许不同。对于使用的建议,在库或第三方类型定义中的公共API定义,应使用interface来提供声明合并功能。除此之外,随你如何使用,但是在整个代码库中应该尽量要保持一致性。