日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

在 TypeScript 中 interface 和 type 的區別

作者:偷光 更新時間: 2023-08-01 編程語言

在 TypeScript 中,interface?和?type?都用于定義自定義類型,但它們有一些區別:

  1. 語法風格:interface?使用關鍵字?interface?開頭,而?type?使用關鍵字?type?開頭。例如:

    interface Person {
      name: string;
      age: number;
    }
    
    type Car = {
      brand: string;
      year: number;
    };
    
  2. 擴展和實現:interface?可以通過繼承或合并來擴展其他接口,并支持類實現。而?type?在定義類型時不支持繼承和合并。

    interface Animal {
      name: string;
      eat(): void;
    }
    
    interface Dog extends Animal { // 接口繼承
      bark(): void;
    }
    
    class Labrador implements Dog { // 類實現接口
      name: string = 'Labrador';
      eat() {
        console.log('Labrador is eating');
      }
      bark() {
        console.log('Labrador is barking');
      }
    }
    
  3. 合并聲明:當定義具有相同名稱的?interface?時,它們會自動合并到一個類型聲明中。而?type?定義具有相同名稱的類型時,會報錯。例如:

    interface Person {
      name: string;
    }
    
    interface Person { // 自動合并到一個類型聲明
      age: number;
    }
    
    const person: Person = {
      name: 'John',
      age: 25,
    };
    
    type Person = {
      name: string;
    };
    
    type Person = { // 報錯,無法重復定義類型 "Person"
      age: number;
    };
    
    const person: Person = {
      name: 'John',
      age: 25,
    };
    
  4. 表示形式:type?具有更強大的功能,能夠使用聯合類型、交叉類型、映射類型、條件類型等高級類型特性,以及使用類型別名進行聲明。而?interface?的功能相對較為簡單,不支持這些高級類型特性。例如:

    type ID = string | number; // 使用類型別名定義聯合類型
    
    type Person = {
      name: string;
      age: number;
    };
    
    type Student = Person & { grade: number }; // 使用交叉類型
    
    type Config = {
      [key: string]: boolean;
    }; // 使用映射類型
    

綜上所述,interface?主要用于定義對象的形狀,并且支持繼承、合并和類的實現,而?type?主要用于創建類型別名,具有更多的高級類型特性,并且不支持繼承和合并。根據不同的需求和場景,選擇合適的工具來定義類型。一般來說,當需要描述一個對象的結構時,優先使用?interface;而當需要創建復雜的、可復用的類型時,可以使用?type?和高級類型特性。

原文鏈接:https://blog.csdn.net/wbskb/article/details/131664595

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新