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

TypeScript中索引簽名的實現(xiàn)示例

 更新時間:2026年01月15日 10:51:22   作者:新節(jié)  
索引簽名在TypeScript中用于定義具有動態(tài)屬性名的對象,它允許使用字符串或數(shù)字作為鍵,并可以限制鍵和值的類型,下面就來詳細的介紹一下TypeScript中索引簽名,感興趣的可以了解一下

1. 基本語法

索引簽名的基本語法如下:

interface SomeObject {
  [key: string]: string;
}

在上面的例子中,[key: string] 表示這個對象可以有任意數(shù)量的字符串類型的鍵,而每個鍵對應的值都是 string 類型。

在使用apiFox對接接口時,經常會自動生成類型:如圖

項目中的一些場景:

2. 使用索引簽名

2.1 定義一個對象類型,允許使用字符串鍵名

interface Dictionary {
  [key: string]: number;
}

const dict: Dictionary = {
  age: 30,
  height: 175
};

console.log(dict["age"]); // 輸出: 30
console.log(dict["height"]); // 輸出: 175

在這個例子中,Dictionary 類型允許我們使用任意的字符串作為鍵,并且每個鍵對應的值都是 number 類型。

2.2 字符串或數(shù)字作為索引類型

你可以指定索引的鍵可以是 字符串數(shù)字,但你不能同時指定這兩種類型。如果你同時使用字符串和數(shù)字,TypeScript 會做一定的類型推導。

interface MixedDictionary {
  [key: string]: number;
  [index: number]: number; // 字符串索引與數(shù)字索引共享相同的值類型
}

const dict: MixedDictionary = {
  age: 25,
  100: 500,
  height: 175
};

console.log(dict["age"]); // 輸出: 25
console.log(dict[100]); // 輸出: 500

3. 限制鍵的類型

你可以使用 字面量類型 限制對象的索引簽名的鍵類型。例如,限制對象的鍵為 'a'、'b''c'

interface MyObject {
  [key: "a" | "b" | "c"]: number;
}

const obj: MyObject = {
  a: 1,
  b: 2,
  c: 3
};

console.log(obj.a); // 輸出: 1

在這個例子中,MyObject 只允許 a、bc 作為鍵。鍵名之外的任何值都會導致編譯錯誤。

4. 只讀索引簽名

有時你可能希望對象的鍵是不可變的,可以使用 readonly 來限制對象的屬性是只讀的。這對確保數(shù)據(jù)的不可變性非常有用。

interface ReadOnlyDict {
  readonly [key: string]: number;
}

const readOnlyDict: ReadOnlyDict = {
  age: 30,
  height: 175
};

console.log(readOnlyDict["age"]); // 輸出: 30
// readOnlyDict["age"] = 35;  // Error: Cannot assign to 'age' because it is a read-only property.

在這個例子中,readOnlyDict 的屬性值是只讀的,意味著你不能更改這些值。

5. 使用類與索引簽名

索引簽名不僅適用于接口,還可以應用于類。當類具有索引簽名時,類的實例可以使用任意的字符串作為鍵。

class MyClass {
  [key: string]: string;

  constructor() {
    this["name"] = "John";
  }
}

const obj = new MyClass();
obj["age"] = "30"; // 可以動態(tài)添加新的屬性
console.log(obj.name); // 輸出: John
console.log(obj.age); // 輸出: 30

在這個例子中,MyClass 類允許通過字符串鍵訪問和修改屬性。

6. 限制索引簽名值的類型

你可以使用聯(lián)合類型來限制索引簽名的值類型。例如:

interface EventDetails {
  [key: string]: "start" | "end"; // 值只能是 "start" 或 "end"
}

const event: EventDetails = {
  event1: "start",
  event2: "end"
};

console.log(event["event1"]); // 輸出: start

在這個例子中,EventDetails 類型的所有值只能是 "start""end"

7. 結合其他類型使用索引簽名

索引簽名也可以與其他類型結合使用,提供更加靈活的類型設計。例如,在組合不同接口時,你可能會同時使用索引簽名和其他屬性。

interface Car {
  make: string;
  model: string;
  [key: string]: string | number; // 支持字符串或數(shù)字類型的任意額外屬性
}

const car: Car = {
  make: "Toyota",
  model: "Corolla",
  year: 2020, // 額外的屬性
  color: "Red"
};

console.log(car);

在這個例子中,Car 類型具有 makemodel 兩個具體屬性,并且可以通過索引簽名動態(tài)添加其他的字符串或數(shù)字類型的屬性。

8. 動態(tài)屬性和字面量類型

通過使用索引簽名,你可以讓對象的鍵動態(tài)地決定類型,并在開發(fā)中提高靈活性。

type DynamicProperties = {
  [key: string]: string;
};

const dynamicObject: DynamicProperties = {
  name: "Alice",
  age: "25",
  occupation: "Engineer"
};

console.log(dynamicObject);

9. 類型推導與索引簽名

TypeScript 會根據(jù)你為索引簽名指定的類型自動推導出對象的屬性類型。例如:

interface DynamicObject {
  [key: string]: string | number;
}

const obj: DynamicObject = {
  name: "Alice",
  age: 30
};

console.log(obj["name"]); // 輸出: Alice
console.log(obj["age"]); // 輸出: 30

10. 使用索引簽名進行合并

索引簽名也可以與其他對象類型合并,通過 & 進行交叉組合。比如:

interface Name {
  name: string;
}

interface Address {
  address: string;
}

type Person = Name &
  Address & {
    [key: string]: string; // 任意的額外屬性
  };

const person: Person = {
  name: "John",
  address: "123 Main St",
  phone: "123-456-7890"
};

console.log(person);

11. 小結

  • 索引簽名(Index Signatures) 用于定義允許具有動態(tài)屬性名的對象。
  • 使用 key: stringkey: number 作為鍵類型來表示對象的屬性鍵。
  • 可以結合其他類型使用索引簽名,靈活地定義對象結構。
  • 通過 readonly 限制對象的鍵為只讀。
  • 索引簽名與類:類的實例也可以使用索引簽名來動態(tài)訪問和修改屬性。
  • 索引簽名與聯(lián)合類型:可以為索引簽名指定值的類型限制。

到此這篇關于TypeScript中索引簽名的實現(xiàn)示例的文章就介紹到這了,更多相關TypeScript 索引簽名內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 深入淺出使用JS/TS輕松搞定Excel與XML互轉

    深入淺出使用JS/TS輕松搞定Excel與XML互轉

    在一些場景下,程序化的Excel與XML轉換能力就顯得尤為重要,這篇文章主要為大家詳細介紹了如何使用JS/TS輕松搞定Excel與XML互轉,感興趣的小伙伴可以了解下
    2025-07-07
  • 詳解js的六大數(shù)據(jù)類型

    詳解js的六大數(shù)據(jù)類型

    js中有六種數(shù)據(jù)類型,包括五種基本數(shù)據(jù)類型(Number,String,Boolean,Null,Undefined),和一種混合數(shù)據(jù)類型(Object)。下面就跟著小編一起來看下吧
    2016-12-12
  • js實現(xiàn)從右往左勻速顯示圖片(無縫輪播)

    js實現(xiàn)從右往左勻速顯示圖片(無縫輪播)

    這篇文章主要為大家詳細介紹了js實現(xiàn)從右往左勻速顯示圖片,無縫輪播,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-06-06
  • js中apply和Math.max()函數(shù)的問題及區(qū)別介紹

    js中apply和Math.max()函數(shù)的問題及區(qū)別介紹

    這篇文章主要介紹了js中apply和Math.max()函數(shù)的問題,本文給大家?guī)韮煞N答案,每一種答案給大家介紹的非常詳細,在文章底部給大家提到了js中Math.max.apply和Math.max的區(qū)別,感興趣的朋友一起看看吧
    2018-03-03
  • 用原生JS對AJAX做簡單封裝的實例代碼

    用原生JS對AJAX做簡單封裝的實例代碼

    下面小編就為大家?guī)硪黄迷鶭S對AJAX做簡單封裝的實例代碼。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-07-07
  • 淺析document.createDocumentFragment()與js效率

    淺析document.createDocumentFragment()與js效率

    對于循環(huán)批量操作頁面的DOM有很大幫助!利用文檔碎片處理,然后一次性append,并且使用原生的javascript語句操作
    2013-07-07
  • js實現(xiàn)簡易計算器功能

    js實現(xiàn)簡易計算器功能

    這篇文章主要為大家詳細介紹了js實現(xiàn)簡易計算器功能,制作能進行加減乘除的計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • JS動態(tài)計算移動端rem的解決方案

    JS動態(tài)計算移動端rem的解決方案

    移動設備分辨率五花八門雖然我們可以通過CSS3的media query來實現(xiàn)適配,但是這種做法并不能適配所有設備,這篇文章主要介紹了js動態(tài)計算移動端rem的解決方案,非常不錯,感興趣的朋友一起看看吧
    2016-10-10
  • 詳解用Webpack與Babel配置ES6開發(fā)環(huán)境

    詳解用Webpack與Babel配置ES6開發(fā)環(huán)境

    這篇文章主要介紹了詳解用Webpack與Babel配置ES6開發(fā)環(huán)境,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-03-03
  • 前端實現(xiàn)pdf文件預覽的操作步驟方法

    前端實現(xiàn)pdf文件預覽的操作步驟方法

    這篇文章主要介紹了前端實現(xiàn)pdf文件預覽的操作步驟方法,前端實現(xiàn)PDF文件流預覽可以使用多種方法,其中一種常用的方法是使用PDF.js庫,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-07-07

最新評論

铁力市| 治县。| 乌恰县| 美姑县| 清丰县| 宽甸| 定结县| 政和县| 邯郸县| 南康市| 隆昌县| 岳普湖县| 岳阳市| 庄浪县| 剑阁县| 凯里市| 栾城县| 炎陵县| 葵青区| 南澳县| 新沂市| 保靖县| 奉节县| 东宁县| 德清县| 谢通门县| 金门县| 徐汇区| 镇平县| 淮安市| 潍坊市| 乐山市| 惠来县| 樟树市| 兴山县| 金塔县| 涿鹿县| 扶余县| 丰都县| 丰台区| 扎囊县|