跳到主要内容

简述TypeScript 中 interface 和 type 的差别是什么?

参考答案:

TypeScript 中的 interfacetype 都是用来定义数据形状的工具,但它们在语法和使用上有一些关键的区别。

  1. 基本语法和灵活性

    • interface:定义了一个对象的形状,即它有哪些属性和方法。interface 可以被继承,也支持索引签名和混合类型。
    • type:使用 type 关键字定义,提供了更多的灵活性。你可以使用 type 来定义更复杂的类型,如联合类型(|)、交叉类型(&)、条件类型(T extends U ? X : Y)、映射类型({ [P in K]: T })等。
  2. 继承

    • interface 可以被继承,允许你扩展和组合多个接口。
    • type 不支持继承,但你可以通过组合其他类型来创建新的类型。
  3. 字符串字面量类型

    • type 支持字符串字面量类型,允许你指定一个字符串只能是特定的值。而 interface 不支持这种类型。
  4. 默认值

    • type 支持为属性设置默认值,而 interface 不支持。
  5. 函数重载

    • interface 可以定义函数重载,而 type 不支持。
  6. 泛型

    • interfacetype 都支持泛型,但 type 在泛型方面提供了更多的灵活性。

总的来说,interfacetype 在 TypeScript 中各有优势。对于定义对象的形状和简单的类型,interface 可能更直观。然而,对于需要更高灵活性和复杂性的场景,type 提供了更多的选择。在实际开发中,你可以根据具体需求来选择使用 interface 还是 type