简述TypeScript 中 interface 和 type 的差别是什么?
参考答案:
TypeScript 中的 interface 和 type 都是用来定义数据形状的工具,但它们在语法和使用上有一些关键的区别。
-
基本语法和灵活性:
interface:定义了一个对象的形状,即它有哪些属性和方法。interface可以被继承,也支持索引签名和混合类型。type:使用type关键字定义,提供了更多的灵活性。你可以使用type来定义更复杂的类型,如联合类型(|)、交叉类型(&)、条件类型(T extends U ? X : Y)、映射类型({ [P in K]: T })等。
-
继承:
interface可以被继承,允许你扩展和组合多个接口。type不支持继承,但你可以通过组合其他类型来创建新的类型。
-
字符串字面量类型:
type支持字符串字面量类型,允许你指定一个字符串只能是特定的值。而interface不支持这种类型。
-
默认值:
type支持为属性设置默认值,而interface不支持。
-
函数重载:
interface可以定义函数重载,而type不支持。
-
泛型:
interface和type都支持泛型,但type在泛型方面提供了更多的灵活性。
总的来说,interface 和 type 在 TypeScript 中各有优势。对于定义对象的形状和简单的类型,interface 可能更直观。然而,对于需要更高灵活性和复杂性的场景,type 提供了更多的选择。在实际开发中,你可以根据具体需求来选择使用 interface 还是 type。