简述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
。