最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

TypeScript中type與interface的使用和區(qū)別

 更新時間:2026年01月15日 10:15:28   作者:新節(jié)  
本文主要介紹了TypeScript中type與interface的使用和區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、基本概念對比

1. 基本語法

interface 示例

interface User {
  id: number;
  name: string;
}

interface Admin extends User {
  privileges: string[];
}

type 示例

type User = {
  id: number;
  name: string;
};

type Admin = User & {
  privileges: string[];
};

2. 核心相同點

? 都能描述對象形狀
? 都支持擴展(interface 用 extends,type 用交叉類型)
? 都支持實現(xiàn)(implements)
? 現(xiàn)代 TypeScript 中性能差異可以忽略

二、關(guān)鍵差異詳解

1. 擴展方式不同

interface 使用繼承:

interface Animal {
  name: string;
}

interface Bear extends Animal {
  honey: boolean;
}

type 使用交叉類型:

type Animal = {
  name: string;
};

type Bear = Animal & {
  honey: boolean;
};

2. 聲明合并(Interface 獨有)

interface User {
  name: string;
}

interface User {
  age: number;
}

// 最終 User 包含 name 和 age 屬性
const user: User = {
  name: "Alice",
  age: 30
};

type 不允許重復(fù)聲明,會報錯

3. 類型表達能力

type 能表達更復(fù)雜的類型

  • 聯(lián)合類型:

    type ID = number | string;
    
  • 元組類型:

    type Point = [number, number];
    
  • 映射類型:

    type Readonly<T> = {
      readonly [P in keyof T]: T[P];
    };
    
  • 條件類型:

    type IsString<T> = T extends string ? true : false;
    

4. 類實現(xiàn)(implement)

兩者都可以被類實現(xiàn),但語法不同:

// 使用 interface
interface ClockInterface {
  currentTime: Date;
}

class Clock implements ClockInterface {
  currentTime: Date = new Date();
}

// 使用 type
type ClockType = {
  currentTime: Date;
};

class DigitalClock implements ClockType {
  currentTime: Date = new Date();
}

三、使用場景推薦

優(yōu)先使用 interface 的情況

  1. 定義對象形狀(尤其是公共 API)

    // 更好的做法
    interface Config {
      apiUrl: string;
      timeout: number;
    }
    
  2. 需要聲明合并時

    // 擴展第三方庫類型
    declare module "vue" {
      interface ComponentCustomProperties {
        $filters: Filters;
      }
    }
    
  3. 面向?qū)ο缶幊?/strong>(類實現(xiàn)接口)

    interface Serializable {
      serialize(): string;
    }
    
    class Document implements Serializable {
      serialize() {
        return "...";
      }
    }
    

優(yōu)先使用 type 的情況

  1. 需要聯(lián)合類型時

    type Result = Success | Failure;
    
  2. 需要元組類型時

    type Coordinates = [number, number];
    
  3. 需要復(fù)雜類型運算時

    type Partial<T> = {
      [P in keyof T]?: T[P];
    };
    
  4. 需要類型別名簡化時

    type StringOrNumber = string | number;
    

四、性能與編譯差異

方面interfacetype
聲明合并支持不支持
錯誤信息更友好相對復(fù)雜
編譯速度稍快(簡單場景)復(fù)雜類型可能稍慢
類型檢查早期綁定延遲解析

五、最佳實踐建議

  1. 項目一致性:團隊統(tǒng)一選擇一種風(fēng)格(或制定明確規(guī)則)

  2. 公共 API:優(yōu)先使用 interface(更好的錯誤提示和擴展性)

  3. 復(fù)雜類型:使用 type 表達高級類型關(guān)系

  4. React Props & State

    // 推薦用法
    type Props = {
      visible: boolean;
    };
    
    type State = {
      count: number;
    };
    
    class Component extends React.Component<Props, State> {}
    

六、經(jīng)典案例對比

1. 擴展第三方庫類型

interface 方式(推薦)

declare namespace Express {
  interface Request {
    user?: User;
  }
}

type 方式(不可行)

// 無法這樣擴展第三方類型
type Express.Request = {
  user?: User;
};

2. 組件 Props 類型

type 方式(推薦)

type ModalProps = {
  visible: boolean;
  onClose: () => void;
  children?: React.ReactNode;
} & (
  | {
      type: "alert";
      message: string;
    }
  | {
      type: "confirm";
      question: string;
    }
);

到此這篇關(guān)于TypeScript中type與interface的使用和區(qū)別的文章就介紹到這了,更多相關(guān)TypeScript type與interface區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js實現(xiàn)DOM走馬燈特效的方法

    js實現(xiàn)DOM走馬燈特效的方法

    這篇文章主要介紹了js實現(xiàn)DOM走馬燈特效的方法,以實例形式較為詳細的分析了走馬燈效果的實現(xiàn)原理與具體步驟,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • 認識Knockout及如何使用Knockout綁定上下文

    認識Knockout及如何使用Knockout綁定上下文

    Knockout簡稱ko,是一個輕量級的javascript類庫,采用MVVM設(shè)計模式(即Model、view、viewModel),簡單優(yōu)雅的實現(xiàn)了雙向綁定,實時更新,幫助您使用干凈的數(shù)據(jù)模型來創(chuàng)建豐富的、響應(yīng)式的用戶界面
    2015-12-12
  • JavaScript實現(xiàn)的SHA-1加密算法完整實例

    JavaScript實現(xiàn)的SHA-1加密算法完整實例

    這篇文章主要介紹了JavaScript實現(xiàn)的SHA-1加密算法,以完整實例形式分析了SHA-1加密算法的具體實現(xiàn)技巧,需要的朋友可以參考下
    2016-02-02
  • 使用JS location實現(xiàn)搜索框歷史記錄功能

    使用JS location實現(xiàn)搜索框歷史記錄功能

    這篇文章主要介紹了使用JS location實現(xiàn)搜索框歷史記錄功能,本文通過實例 代碼講解的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-12-12
  • js封裝tab標簽頁實例分享

    js封裝tab標簽頁實例分享

    本篇文章主要分享了js封裝tab標簽頁的示例代碼,具有很好的參考價值,需要的朋友一起來看下吧
    2016-12-12
  • yepnope.js使用詳解及示例分享

    yepnope.js使用詳解及示例分享

    yepnope.js 是一個超高速的按條件異步加載資源的加載器,允許你只加載使用到的資源(css及js)。
    2014-06-06
  • webpack DefinePlugin源碼入口解析

    webpack DefinePlugin源碼入口解析

    這篇文章主要為大家介紹了webpack DefinePlugin源碼入口解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-11-11
  • JS數(shù)組的賦值介紹

    JS數(shù)組的賦值介紹

    本篇文章主要是對JS數(shù)組的賦值進行了介紹,需要的朋友可以過來參考下,希望對大家有所幫助
    2014-03-03
  • xml 與javascript結(jié)合的問題解決方法

    xml 與javascript結(jié)合的問題解決方法

    xml 與javascript結(jié)合的問題解決方法...
    2007-03-03
  • JavaScript中實現(xiàn)最高效的數(shù)組亂序方法

    JavaScript中實現(xiàn)最高效的數(shù)組亂序方法

    這篇文章主要介紹了JavaScript中實現(xiàn)最高效的數(shù)組亂序方法,數(shù)組亂序的意思是,把數(shù)組內(nèi)的所有元素排列順序打亂,需要的朋友可以參考下
    2014-10-10

最新評論

新乡县| 洛南县| 和龙市| 岳普湖县| 海伦市| 平邑县| 大丰市| 大宁县| 汾阳市| 阜新| 洛隆县| 泰宁县| 西贡区| 株洲市| 东明县| 乃东县| 南昌县| 聂荣县| 乡宁县| 巩义市| 平利县| 林西县| 沅江市| 永嘉县| 资阳市| 务川| 浙江省| 蓝山县| 加查县| 喀喇| 安图县| 开化县| 章丘市| 安乡县| 湟源县| 河曲县| 吉林省| 东阳市| 南安市| 连平县| 江城|