// 使用type定义一个类型
type Person = {name: string;age: number;
}// 使用interface定义一个类型
interface Animal {name: string;age: number;
}// 使用type定义一个函数签名
type Add = (a: number, b: number) => number;// 使用interface定义一个函数签名
interface Subtract {(a: number, b: number): number;
}// 使用type定义一个泛型
type Container<T> = {value: T;
}// 使用interface定义一个泛型
interface Box<T> {value: T;
}// 使用type进行类型别名
type Score = number;
type Name = string;// interface是一个合并类型,可以多次声明同一个接口
interface User {name: string;
}
interface User {age: number;
}// type不是合并类型,如果重复定义会报错
type Person = {name: string;
}
type Person = {age: number;
} // 报错!重复定义// type可以使用联合类型和交叉类型
type A = string | number;
type B = { name: string } & { age: number };
type 和 interface 在绝大多数情况下可以互换使用,都能够定义对象类型、函数类型、泛型类型等。不过有一些微小的差别:
- interface在声明合并时,会将同名属性进行合并,而type会报错。
- type可以使用联合类型和交叉类型,而interface不能直接使用。
- type可以为基本类型(如number、string等)定义类型别名,interface不可以。
- 当定义类型别名时,使用type更为直观;当定义对象类型时,使用interface更为直观。
一般来说,如果你不确定该使用type还是interface,可以优先选择interface,因为它在使用上更加直观,并且可以方便地声明合并。